Per un nuovo progetto node.js a cui sto lavorando, sto pensando di passare da un approccio di sessione basato su cookie (con questo, voglio dire, memorizzare un ID in un archivio di valori-chiave contenente sessioni utente nel browser di un utente) a un approccio di sessione basato su token (nessun archivio valori-chiave) utilizzando i token Web JSON (jwt).
Il progetto è un gioco che utilizza socket.io: avere una sessione basata su token sarebbe utile in un tale scenario in cui ci saranno più canali di comunicazione in una singola sessione (web e socket.io)
Come si può fornire l'invalidazione token / sessione dal server usando l'approccio jwt?
Volevo anche capire quali trappole / attacchi comuni (o non comuni) avrei dovuto cercare con questo tipo di paradigma. Ad esempio, se questo paradigma è vulnerabile agli stessi / diversi tipi di attacchi dell'approccio basato sull'archivio sessioni / cookie.
Quindi, supponiamo che io abbia il seguente (adattato da questo e questo ):
Login negozio sessione:
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});
});
}
Accesso basato su 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});
});
}
-
Un logout (o non valido) per l'approccio Session Store richiederebbe un aggiornamento al database KeyValueStore con il token specificato.
Sembra che un tale meccanismo non esisterebbe nell'approccio basato su token poiché il token stesso conterrebbe le informazioni che normalmente esisterebbero nell'archivio valori-chiave.
isRevoked
all'opzione o provare a replicare la stessa funzionalità. github.com/auth0/express-jwt#revoked-tokens