【问题标题】:How to invalid a JWT token generated previously ,when the password is reset/changed in javajava - 当密码在java中重置/更改时,如何使先前生成的JWT令牌无效
【发布时间】:2018-11-15 22:17:11
【问题描述】:

我已经创建了 AccessToken(JWT 令牌), 我想在重置密码/更改密码时使该令牌无效 (即:旧的 accessToken 应该是无效的,新的应该是有效的)

【问题讨论】:

    标签: java jwt


    【解决方案1】:

    我迟到了答案,但我认为它可以帮助其他人。 如果您想在更改密码后使您的 jwt 无效,这很容易做到,但您只需要了解,当您更改密钥时,jwt 令牌不再有效,您需要做的就是将您的散列密码作为秘密为您的 jwt 设置密钥,并确保新密码与旧密码无关,并且它无效知道就是这样

    奖金

    确保将过期时间设置为 1 小时之类的一小段时间以使其更安全

    【讨论】:

      【解决方案2】:

      解决此问题的一种方法是将token_seq 之类的字段保存在您的数据库中。然后在 JWT 中包含 user_idtoken_seq。在密码重置过程中,您增加token_seq 字段。在验证您的 JWT 时,您同时检查 user_idtoken_seq

      这为您提供了一种随时使所有“旧”令牌无效的方法。

      更新:this answer 的另一种方法是使用您已经为用户存储的任何密码值的哈希值。这意味着当密码更改时,任何旧令牌都会自动失效。

      【讨论】:

        【解决方案3】:

        首先,在成功重置密码后,在客户端使 JWT 失效/移除。

        捕获表中的密码更改时间戳。

        在 JWT 令牌的有效负载中提供“issue at(iat)”时间戳。

        在服务器中解码令牌时,检查“iat”时间戳是否早于密码更改时间戳。如果是,则使令牌无效。

        使用这种机制,您不必担心用户拥有多个 JWT 的情况,但读取数据库以获取密码更改时间戳会有一点开销。

        【讨论】:

        • 如果您需要访问 db 来检查 jwt 有什么意义?最好使用存储在 db 中的常用令牌。不是吗?
        【解决方案4】:

        我认为您必须将 jwt 令牌存储在数据库中(更好地存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都会检查数据库中令牌的存在。

        Invalidating JSON Web Tokens

        【讨论】:

        • 他在询问 jwt 令牌。如果将 jwt 令牌存储在 db 中,则使用它们毫无意义。
        猜你喜欢
        • 2017-02-03
        • 1970-01-01
        • 2017-11-23
        • 2015-01-02
        • 2020-03-27
        • 2020-05-13
        • 2021-06-28
        • 1970-01-01
        相关资源
        最近更新 更多