【发布时间】:2018-11-15 22:17:11
【问题描述】:
我已经创建了 AccessToken(JWT 令牌), 我想在重置密码/更改密码时使该令牌无效 (即:旧的 accessToken 应该是无效的,新的应该是有效的)
【问题讨论】:
我已经创建了 AccessToken(JWT 令牌), 我想在重置密码/更改密码时使该令牌无效 (即:旧的 accessToken 应该是无效的,新的应该是有效的)
【问题讨论】:
我迟到了答案,但我认为它可以帮助其他人。 如果您想在更改密码后使您的 jwt 无效,这很容易做到,但您只需要了解,当您更改密钥时,jwt 令牌不再有效,您需要做的就是将您的散列密码作为秘密为您的 jwt 设置密钥,并确保新密码与旧密码无关,并且它无效知道就是这样
奖金
确保将过期时间设置为 1 小时之类的一小段时间以使其更安全
【讨论】:
解决此问题的一种方法是将token_seq 之类的字段保存在您的数据库中。然后在 JWT 中包含 user_id 和 token_seq。在密码重置过程中,您增加token_seq 字段。在验证您的 JWT 时,您同时检查 user_id 和 token_seq。
这为您提供了一种随时使所有“旧”令牌无效的方法。
更新:this answer 的另一种方法是使用您已经为用户存储的任何密码值的哈希值。这意味着当密码更改时,任何旧令牌都会自动失效。
【讨论】:
首先,在成功重置密码后,在客户端使 JWT 失效/移除。
捕获表中的密码更改时间戳。
在 JWT 令牌的有效负载中提供“issue at(iat)”时间戳。
在服务器中解码令牌时,检查“iat”时间戳是否早于密码更改时间戳。如果是,则使令牌无效。
使用这种机制,您不必担心用户拥有多个 JWT 的情况,但读取数据库以获取密码更改时间戳会有一点开销。
【讨论】:
我认为您必须将 jwt 令牌存储在数据库中(更好地存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都会检查数据库中令牌的存在。
【讨论】: