在没有黑名单的情况下使 Jwt 令牌无效

Invalidating Jwt Token without a blacklist

我想使刷新 jwt 令牌失效 而不维护使用过的刷新令牌的黑名单 与旋转,为此我有一个想法包括 ValidationCode 在服务器生成和存储的 RT 有效载荷中,每当检测到 2 个刷新令牌正在使用不同的旋转数时(例如,正常用户从他的最后一个请求中获得的 RT2 和恶意用户在之后生成的 RT3使用旧的 RT2 发送恶意请求)。

一旦服务器发现一个RT2正在使用,而最新的是RT3。服务器应该“使之前的令牌无效”,并在用户使用他的密码等重新连接时发出新的RT。使令牌无效的过程只是更改新生成的令牌中的ValidationCode,并接受令牌有效的任何请求 + 有效负载中的验证码与为该用户存储在服务器中的验证码相匹配。

如果使用这种方法,如果恶意用户再次尝试使用 RT3,即使 jwt 令牌有效,ValidationCode 现在已更改并且它不会匹配服务器中的代码,但是新生成的令牌会匹配。

这种方法是否安全且足够好以取代列入黑名单的旧令牌? 我认为这违背了最初使用 jwt 的目的 + 浪费时间和内存存储列表并在其中查询数据库

您在这里描述的是一种解决方案,您可以只将用户使用的最新 RT 保留在数据库中,并且只允许刷新请求,而 RT 保存在数据库中。这是一种有效的方法,但它有一个缺点:您只能为用户提供一对活动的 AT/RT。如果这对您来说没问题,那么您可以使用此解决方案。

wasting time and memory storing the list and querying in the database

无论哪种方式,您都必须查询数据库,因此变化不大。您获得的是一点存储空间 space.