Üzerinde çalıştığım yeni bir node.js projesi için, çerez tabanlı oturum yaklaşımından geçiş yapmayı düşünüyorum (bununla, bir kullanıcının tarayıcısında kullanıcı oturumlarını içeren bir anahtar / değer deposuna bir kimlik depolamak) JSON Web Belirteçlerini (jwt) kullanarak belirteç tabanlı bir oturum yaklaşımına (anahtar / değer deposu yok).
Proje socket.io kullanan bir oyundur - jeton tabanlı bir oturuma sahip olmak, tek bir oturumda birden çok iletişim kanalının (web ve socket.io) olacağı böyle bir senaryoda yararlı olacaktır.
Jwt Yaklaşımı kullanılarak sunucudan jeton / oturum geçersiz kılma nasıl sağlanır?
Ayrıca, bu tür bir paradigma ile hangi yaygın (veya nadir) tuzakları / saldırıları dikkat etmem gerektiğini anlamak istedim. Örneğin, bu paradigma, oturum deposu / çerez tabanlı yaklaşımla aynı / farklı saldırı türlerine karşı savunmasızsa.
Yani, aşağıdakileri (uyarlanan söylüyorlar bu ve bu ):
Oturum Mağaza Girişi:
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});
});
}
Jeton Bazlı Giriş:
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});
});
}
-
Oturum Deposu yaklaşımı için oturum kapatma (veya geçersiz kılma), belirtilen belirteci olan KeyValueStore veritabanında bir güncelleştirme gerektirir.
Token tabanlı yaklaşımda böyle bir mekanizma olmayacak gibi görünüyor çünkü token kendisi normalde anahtar / değer deposunda var olacak bilgileri içerecektir.
isRevoked
seçeneğe bakabilir veya aynı işlevselliği çoğaltmayı deneyebilirsiniz. github.com/auth0/express-jwt#revoked-tokens