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

时间:2016-05-26 06:54:59

标签: javascript node.js authentication token jwt

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

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

那么有人能告诉我如何避免这种情况吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:2)

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

根据https://www.npmjs.com/package/jsonwebtoken的文档,expiresIn字段也没有默认值,因此只需将其忽略即可。

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

答案 2 :(得分:0)

你不能使我所知道的JWT令牌无效,我总是建议总是有一个短暂的过期时间,最长持续时间为一周。首先要让你的应用程序检查你的令牌是否很难实现当有效时,有时会生效并请求新的令牌,允许您刷新令牌或检查令牌是否对大多数JWT库有效。现在,如果你坚持要保留你的令牌没有过期时间,那么我建议保留一份你的中间件会检查的黑名单。在here之前有一个类似的问题。希望这有帮助