对于我正在处理的新 node.js 项目,我正在考虑从基于 cookie 的会话方法切换(我的意思是,将 id 存储到包含用户浏览器中用户会话的键值存储)到使用 JSON Web 令牌 (jwt) 的基于令牌的会话方法(无键值存储)。
该项目是一个利用 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 数据库。
似乎这种机制在基于令牌的方法中不存在,因为令牌本身将包含通常存在于键值存储中的信息。