私が取り組んでいる新しいnode.jsプロジェクトの場合、Cookieベースのセッションアプローチから切り替えることを考えています(つまり、IDを、ユーザーのブラウザーでユーザーセッションを含むKey-Valueストアに格納します)。 JSON Web Token(jwt)を使用したトークンベースのセッションアプローチ(Key-Valueストアなし)に。
このプロジェクトは、socket.ioを利用するゲームです。単一のセッション(webおよびsocket.io)に複数の通信チャネルがあるようなシナリオでは、トークンベースのセッションがあると便利です。
jwtアプローチを使用して、サーバーからトークン/セッションの無効化をどのように提供しますか?
また、この種のパラダイムで注意する必要のある一般的な(または一般的でない)落とし穴/攻撃についても理解したいと思いました。たとえば、このパラダイムが、セッションストア/ Cookieベースのアプローチと同じ/異なる種類の攻撃に対して脆弱である場合。
だから、私は次のものを持っていると言います(これとこれから適応されます):
セッションストアログイン:
app.get('/login', function(request, response) {
var user = {username: request.body.username, password: request.body.password };
// Validate somehow
validate(user, function(isValid, profile) {
// Create session token
var token= createSessionToken();
// Add to a key-value database
KeyValueStore.add({token: {userid: profile.id, expiresInMinutes: 60}});
// The client should save this session token in a cookie
response.json({sessionToken: token});
});
}
トークンベースのログイン:
var jwt = require('jsonwebtoken');
app.get('/login', function(request, response) {
var user = {username: request.body.username, password: request.body.password };
// Validate somehow
validate(user, function(isValid, profile) {
var token = jwt.sign(profile, 'My Super Secret', {expiresInMinutes: 60});
response.json({token: token});
});
}
-
セッションストアアプローチのログアウト(または無効化)では、指定されたトークンを使用してKeyValueStoreデータベースを更新する必要があります。
トークン自体にはキーと値のストアに通常存在する情報が含まれているため、このようなメカニズムはトークンベースのアプローチには存在しないようです。
isRevoked
オプションを確認するか、同じ機能を複製してみることができます。github.com/auth0/express-jwt#revoked-tokens