Pour un nouveau projet node.js sur lequel je travaille, je pense à passer d'une approche de session basée sur les cookies (par cela, je veux dire, stocker un identifiant dans un magasin de valeurs-clés contenant des sessions utilisateur dans le navigateur d'un utilisateur) à une approche de session basée sur des jetons (pas de magasin de valeurs-clés) à l'aide de jetons Web JSON (jwt).
Le projet est un jeu qui utilise socket.io - avoir une session basée sur des jetons serait utile dans un tel scénario où il y aura plusieurs canaux de communication dans une seule session (web et socket.io)
Comment fournir une invalidation de jeton / session à partir du serveur en utilisant l'approche jwt?
Je voulais aussi comprendre quels pièges / attaques courants (ou peu communs) je devais rechercher avec ce genre de paradigme. Par exemple, si ce paradigme est vulnérable aux mêmes / différents types d'attaques que l'approche basée sur le magasin de session / cookie.
Donc, disons que j'ai ce qui suit (adapté de ceci et de cela ):
Connexion au magasin de sessions:
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});
});
}
Connexion basée sur les jetons:
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});
});
}
-
Une déconnexion (ou invalidation) pour l'approche du magasin de sessions nécessiterait une mise à jour de la base de données KeyValueStore avec le jeton spécifié.
Il semble qu'un tel mécanisme n'existerait pas dans l'approche basée sur les jetons, car le jeton lui-même contiendrait les informations qui existeraient normalement dans le magasin de valeurs-clés.
isRevoked
option ou tenter de répliquer la même fonctionnalité. github.com/auth0/express-jwt#revoked-tokens