2016-08-11 16 views
1

stormpath APIを使用してoauth2トークンを取り消そうとしています。サーバー側の認証は、stormpath + expressを使用して実行されます。ここに私の要求があります。 apiBaseUrlは私nodejsベースURLであるとouath_tokens/oauth/tokenエンドポイントへの要求によって付与された応答が含まれてい

function revokeOauthTokens(params) { 
 
     // Revoke the oauth2 access. and refresh tokens 
 
     var oauthLogoutReq = { 
 
     method: 'POST', 
 
     url: params.apiBaseUrl + '/logout', 
 
     headers: { 
 
      'Content-Type': 'application/x-www-form-urlencoded' 
 
     }, 
 
     data: 'grant_type=refresh_token&refresh_token=' 
 
      + params.oauth_tokens.refresh_token 
 
     } 
 
     return $http(oauthLogoutReq); 
 
    }

次のリンクのドキュメントを見ると、私は混乱します。

感謝。

+0

こんにちは!私は[Stormpath](https://stormpath.com)で働いていますので、私は確かにここで助けてくれるでしょう。 Stormpathが提供する/ oauth/tokenエンドポイントでトークンを手動で作成するなど、直接的に統合する場合は、私たちに 'express-stormpath'ライブラリ(クッキー経由でトークンを管理する)を使用しているかどうか教えてください。ありがとう! – robertjd

+0

oauth/tokensを使用して手動でトークンを作成しています。 –

+0

ありがとうございました!コードサンプルを使用してこれを行う方法を説明しなければなりません。これは今まとめています。私は準備ができたら答えをフォローアップします。 – robertjd

答えて

1

これは大きな質問です。あなたが見たように、express-stormpathはトークンストレージ用の安全なHTTP専用クッキーを使用していますが、これはCookieストレージが仕様に実装されていないCordova、Electronなどでは機能しません。代わりに、ローカルストレージ、またはあなたに提供されている他のストレージAPI(安全なものが欲しい!)があります。

express-stormpathライブラリは/logoutルートを提供し、トークンを取り消しますが、クッキー内のトークンを探しています。トークンの明示的な取り消しをサポートするために、新しいルートを追加する必要があります(/oauth/revoke)。

これは、カスタムルートハンドラとしてすぐに追加するのが簡単です。以下のリンクを含めています。しかし、express-stormpathは、デフォルトでローカルトークン検証を使用しています()。これは速度(APIへのラウンドトリップなし)で行われますが、ローカルサーバーはトークンが取り消されたことを知らず、悪意のある第三者がクライアントからトークンを盗んだ場合でも技術的に認証に使用できます。これが問題になっている場合は、stormpath検証にオプトインする必要があります。これは常にトークンデータベースに対してチェックが必要です。これは、ここに文書化されています

http://docs.stormpath.com/nodejs/express/latest/authentication.html#token-validation-strategy

ここでは、言ったことはすべて、あなたが/oauth/revokeとしてアップ配線、およびユーザーがログアウトしたときにあなたの電子クライアントはトークンを取り消すためにそれを使用するかもしれないルートハンドラです:

あなたは急行-stormpathを使用しないことを見つけて、より直接的なものを使用したい場合、あなたは Stormpath Node SDKに落下し、トークンの取り消しのためにそれを使用することができます
'use strict'; 

var revokeToken = require('express-stormpath/lib/helpers/revoke-token'); 

function defaultResponder(res, err) { 
    if (err) { 
    console.error(err); // or your system logger 
    return res.status(err.status || 400).json({ 
     message: err.developerMessage || err.message 
    }); 
    } 
    res.end(); 
} 

/** 
* Implements the expected behavior of the /oauth/revoke endpoint, and requires 
* that token_type be defined. This assumes that you are using the express-stormpath 
* module, so that your Stormpath client and configuration context is available. 
* 
* @param {Object<ExpressRequest>} req  Express JS Request 
* @param {Object<ExpressResponse>} res  Express JS Response 
*/ 
function revokeTokens(req, res){ 

    var client = req.app.get('stormpathClient'); 
    var config = req.app.get('stormpathConfig'); 
    var secret = config.client.apiKey.secret; 
    var token = req.body.token; 
    var token_type = req.body.token_type; 

    if (!token || ! token_type) { 
    defaultResponder(res, { 
     message: 'token and token_type fields are required' 
    }); 
    } 

    if (token_type === 'access_token') { 
    revokeToken.revokeAccessToken(client, token, secret, defaultResponder.bind(null, res)); 
    } else if (token_type === 'refresh_token') { 
    revokeToken.revokeRefreshToken(client, token, secret, defaultResponder.bind(null, res)); 
    } else { 
    defaultResponder(res, { 
     message: 'invalid token_type' 
    }); 
    } 
} 


module.exports = revokeTokens; 

https://docs.stormpath.com/nodejs/jsdoc/AccessToken.html

それとも、直接私たちのAPIに対するDELETE要求を行うことができます。いずれの場合も

https://docs.stormpath.com/rest/product-guide/latest/auth_n.html#revoking-access-and-refresh-tokens

を、あなたはそのサーバーからではなく、電子申請を行うことになります。

こちらがお役に立てば幸いです。

-Robert

関連する問題