Untuk proyek node.js baru yang sedang saya kerjakan, saya sedang berpikir untuk beralih dari pendekatan sesi berbasis cookie (maksud saya, menyimpan id ke toko nilai-kunci yang berisi sesi pengguna di browser pengguna) untuk pendekatan sesi berbasis token (tidak ada toko nilai kunci) menggunakan JSON Web Tokens (jwt).
Proyek ini adalah permainan yang memanfaatkan socket.io - memiliki sesi berbasis token akan berguna dalam skenario di mana akan ada beberapa saluran komunikasi dalam satu sesi (web dan socket.io)
Bagaimana cara menyediakan token / sesi tidak valid dari server menggunakan Pendekatan jwt?
Saya juga ingin memahami apa jebakan / serangan umum (atau tidak umum) yang harus saya perhatikan dengan paradigma semacam ini. Misalnya, jika paradigma ini rentan terhadap serangan yang sama / berbeda dengan pendekatan sesi store / cookie.
Jadi, katakan saya memiliki yang berikut (diadaptasi dari ini dan ini ):
Login Toko Sesi:
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});
});
}
Login Berbasis 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});
});
}
-
Logout (atau tidak valid) untuk pendekatan Session Store akan memerlukan pembaruan ke database KeyValueStore dengan token yang ditentukan.
Sepertinya mekanisme seperti itu tidak akan ada dalam pendekatan berbasis token karena token itu sendiri akan berisi info yang biasanya ada di toko kunci-nilai.
isRevoked
opsi ini, atau mencoba mereplikasi fungsi yang sama. github.com/auth0/express-jwt#revoked-tokens