【问题标题】:How to invalidate a JWT token with no expiry time如何使没有到期时间的 JWT 令牌无效
【发布时间】:2016-09-24 00:43:29
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript node.js authentication token jwt


【解决方案1】:

据我所知,您不能使您的 JWT 令牌无效,我始终建议您始终设置一个较短的过期时间,最长持续时间为一周,首先实施您的应用程序以检查您的令牌是否在不时有效并在无效时请求新的,有些规定允许您刷新令牌或检查令牌是否对大多数 JWT 库有效。现在,如果您坚持要在没有过期时间的情况下保留令牌,那么我建议保留您的中间件将检查的各种黑名单。在here 之前也有人问过类似的问题。希望这会有所帮助

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 2021-12-24
        • 2016-12-03
        • 2020-02-09
        • 2021-04-13
        • 2016-11-13
        • 2016-12-31
        • 2020-08-12
        相关资源
        最近更新 更多