在java中重置/更改密码时,如何使先前生成的JWT令牌无效

时间:2018-06-06 09:28:15

标签: java jwt

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

4 个答案:

答案 0 :(得分:0)

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

这使您可以随时使所有“旧”令牌失效。

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

答案 1 :(得分:0)

我来迟了,但我认为它可以帮助其他人。 如果您想在更改密码后使jwt失效,这很容易做到,但是您只需要了解以下内容:当您更改密钥时,jwt令牌不再有效,您需要做的就是将哈希密码作为secet您的jwt的密钥,并确保新密码与旧密码不多,并且无效,知道是这样

奖金

确保使用过期时间(例如1小时)以使其更安全

答案 2 :(得分:-1)

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

mitmproxy

答案 3 :(得分:-1)

首先,当密码成功重置时,在客户端无效/删除JWT。

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

在(iat)"提供"问题JWT令牌的有效载荷中的时间戳。

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

使用此机制,您无需担心用户具有多个JWT的情况,但是读取数据库以获取密码更改时间戳会有轻微的开销。