これは大きな質問です。あなたが見たように、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
こんにちは!私は[Stormpath](https://stormpath.com)で働いていますので、私は確かにここで助けてくれるでしょう。 Stormpathが提供する/ oauth/tokenエンドポイントでトークンを手動で作成するなど、直接的に統合する場合は、私たちに 'express-stormpath'ライブラリ(クッキー経由でトークンを管理する)を使用しているかどうか教えてください。ありがとう! – robertjd
oauth/tokensを使用して手動でトークンを作成しています。 –
ありがとうございました!コードサンプルを使用してこれを行う方法を説明しなければなりません。これは今まとめています。私は準備ができたら答えをフォローアップします。 – robertjd