gpt4 book ai didi

javascript - 使 JSON Web token 失效

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:01 26 4
gpt4 key购买 nike

对于我正在开发的一个新的 node.js 项目,我正在考虑从基于 cookie 的 session 方法(我的意思是,将 id 存储到包含用户浏览器中的用户 session 的键值存储)切换到使用 JSON Web token (jwt) 的基于 token 的 session 方法(无键值存储)。

该项目是一个利用 socket.io 的游戏 - 在单个 session 中存在多个通信 channel (web 和 socket.io)的情况下,拥有基于 token 的 session 将非常有用

如何使用 jwt 方法从服务器提供 token / session 失效?

我还想了解我应该在这种范例中注意哪些常见(或不常见)的陷阱/攻击。例如,如果此范例容易受到与 session 存储/基于 cookie 的方法相同/不同类型的攻击。<​​/p>

所以,假设我有以下内容(改编自 thisthis ):

session 存储登录:

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});
});
}

基于 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});
});
}

--

session 存储方法的注销(或无效)需要更新 KeyValueStore具有指定 token 的数据库。

基于 token 的方法似乎不存在这种机制,因为 token 本身将包含通常存在于键值存储中的信息。

最佳答案

我也一直在研究这个问题,虽然下面的想法都不是完整的解决方案,但它们可能会帮助其他人排除想法,或提供进一步的想法。

1) 只需从客户端删除 token

显然,这对服务器端安全没有任何作用,但它确实通过删除 token 来阻止攻击者(即,他们必须在注销之前窃取 token )。

2) 创建 token 阻止列表

您可以存储无效 token 直到其初始到期日期,并将它们与传入请求进行比较。但这似乎否定了首先完全基于 token 的原因,因为您需要为每个请求触摸数据库。不过,存储大小可能会较小,因为您只需要存储注销和到期时间之间的 token (这是一种直觉,并且绝对取决于上下文)。

3)只需缩短 token 到期时间并经常轮换

如果您将 token 过期时间保持在足够短的间隔内,并且让正在运行的客户端在必要时跟踪并请求更新,则第 1 号将有效地作为完整的注销系统工作。此方法的问题在于,它无法在客户端代码关闭之间保持用户登录状态(取决于您设置的到期间隔有多长)。

应急计划

如果出现紧急情况或用户 token 被泄露,您可以做的一件事是允许用户使用其登录凭据更改底层用户查找 ID。这将使所有关联的 token 无效,因为将无法再找到关联的用户。

我还想指出,最好在 token 中包含上次登录日期,以便您能够在一段时间后强制重新登录。

就使用 token 的攻击的相似/差异而言,这篇文章解决了以下问题:https://github.com/dentarg/auth0-blog/blob/master/_posts/2014-01-07-angularjs-authentication-with-cookies-vs-token.markdown

关于javascript - 使 JSON Web token 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com