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