在java中重置/更改密码时,如何使先前生成的JWT令牌无效
我已经创建了AccessToken(JWT token), 我想在重置密码/更改密码时使该令牌无效在java中重置/更改密码时,如何使先前生成的JWT令牌无效,java,jwt,Java,Jwt,我已经创建了AccessToken(JWT token), 我想在重置密码/更改密码时使该令牌无效 (即:旧的accessToken应该无效,新的应该有效)我认为您必须将jwt令牌存储在数据库中(最好存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都必须检查数据库中是否存在该令牌 我认为您必须将jwt令牌存储在数据库中(最好存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都必须检查数据库中是否存在该令牌 首先,在成功重置密码后,在客户端使J
(即:旧的accessToken应该无效,新的应该有效)我认为您必须将jwt令牌存储在数据库中(最好存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都必须检查数据库中是否存在该令牌
我认为您必须将jwt令牌存储在数据库中(最好存储在内存数据库中)。当用户更改密码时,删除特定用户的令牌。每次验证令牌时,都必须检查数据库中是否存在该令牌
首先,在成功重置密码后,在客户端使JWT失效/删除JWT 在表中捕获密码更改时间戳 在JWT令牌的有效负载中提供“iat(iat)”时间戳 在服务器中解码令牌时,检查“iat”时间戳是否早于密码更改时间戳。如果是,则使令牌无效
使用此机制,您不必担心用户有多个JWT的情况,但读取数据库中的密码更改时间戳会有一些开销。首先,在成功重置密码时,在客户端使JWT无效/删除 在表中捕获密码更改时间戳 在JWT令牌的有效负载中提供“iat(iat)”时间戳 在服务器中解码令牌时,检查“iat”时间戳是否早于密码更改时间戳。如果是,则使令牌无效
使用这种机制,您不必担心用户有多个JWT的情况,但在读取数据库中的密码更改时间戳时会有一些开销。一种方法是在数据库中保存一个类似于
标记的字段。然后将用户id
和令牌seq
都包含在JWT中。在密码重置过程中,您可以增加令牌_seq
字段。验证JWT时,请同时检查user\u id
和token\u seq
这为您提供了一种随时使所有“旧”令牌失效的方法
更新:来自的另一种方法是使用您已经为用户存储的任何密码值的散列。这意味着当密码更改时,任何旧令牌都将自动失效。一种方法是在数据库中保存一个类似于token\u seq
的字段。然后将用户id
和令牌seq
都包含在JWT中。在密码重置过程中,您可以增加令牌_seq
字段。验证JWT时,请同时检查user\u id
和token\u seq
这为您提供了一种随时使所有“旧”令牌失效的方法
更新:来自的另一种方法是使用您已经为用户存储的任何密码值的散列。这意味着,当密码更改时,任何旧令牌都将自动失效。我的答案可能会迟到,但我认为这可以帮助其他人。
如果您想在更改密码后使jwt无效,这很容易,但您只需要了解,当您更改密钥时,jwt令牌不再有效。您需要做的是将哈希密码作为jwt的secet密钥,并确保新密码与旧密码相差不大,并使其无效我知道就这样
奖金
请确保使用expire(过期时间)为短时间,如1小时,以使其更安全我的答案可能会迟到,但我认为它可以帮助其他人。
如果您想在更改密码后使jwt无效,这很容易,但您只需要了解,当您更改密钥时,jwt令牌不再有效。您需要做的是将哈希密码作为jwt的secet密钥,并确保新密码与旧密码相差不大,并使其无效我知道就这样
奖金
确保使用expire到1小时这样的少量时间,以使其更安全他询问的是jwt代币。如果您将jwt令牌存储在db中,那么使用它们是没有意义的。他正在询问关于jwt令牌的问题。如果您将jwt令牌存储在db中,那么使用jwt令牌没有意义。如果您需要访问db来检查它,jwt有什么意义?最好使用存储在db中的常用令牌。是吗?如果你需要访问数据库来检查它,jwt有什么意义?最好使用存储在db中的常用令牌。不是吗?