如何使没有到期时间的 JWT 令牌失效

新手上路,请多包涵

我正在使用 JWT 创建一个 node.js 后端应用程序。对我来说,要求很简单,授权令牌不应该有任何到期时间。但是当用户更改密码时,我在使 JWT 无效期间遇到问题。

当用户更改密码时,我将创建一个新的 JWT 令牌,并删除旧令牌,但用户仍然可以使用他的旧 JWT 令牌(来自其他登录设备)并可以访问该应用程序。

那么谁能告诉我如何避免这种情况?

原文由 user2875371 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 761
2 个回答

对我来说这是一个熟悉的问题,我已经回答了类似的问题 Best practices to Invalidate a JWT Token

所以解决你的问题的步骤如下,

当用户登录时,在他的用户数据库中创建一个没有过期时间的登录令牌。

因此,在使 JWT 无效时,请按照以下步骤操作,

  • 检索用户信息并检查令牌是否在他的用户数据库中。如果允许。
  • 当用户注销时,只从他的用户数据库中删除这个令牌。
  • 当用户更改密码时,从他的用户数据库中删除所有令牌并要求他重新登录。

所以基本上你需要将令牌存储在用户的数据库中并在失效时使用它。简单的 :)

原文由 Gopinath Shiva 发布,翻译遵循 CC BY-SA 3.0 许可协议

JWT 的 exp 声明是可选的。如果令牌没有它,则认为它不会过期

根据 https://www.npmjs.com/package/jsonwebtoken 的文档, expiresIn 字段也没有默认值,所以忽略它。

 var token = jwt.sign({email:'sivamanismca@gmail.com',role:'User'}, "Secret", {});


原文由 sivamani s 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题