繁体   English   中英

JWT:在到期后的一分钟或更短的时间内将新令牌传递给客户端。 坏主意还是好?

[英]JWT: passing a new token to client at one minute or less from expiring. Bad idea or good?

在我的后端,我检查JWT到期前还剩下多长时间(15分钟)。 如果是一分钟或更短的时间,我将创建一个新的并将其附加到setToken标头中的响应中。 然后,前端将存储并使用新的前端。 这是一个好方法吗? 对此事有何看法?

谢谢

你的主意很好。 您正在实现令牌刷新算法。 取决于用例,但最好是更频繁地返还一个新的新令牌,不仅是在令牌将在下一分钟到期时。

例如,一种常见方法是结合概率算法(如您的算法),以概率分布(例如,每个请求的概率为30%的情况下,以发回新令牌的方式)返还一个新令牌。 因此,对于每个请求:

if (30% of times true || token is expiring in next n seconds)
    give a new refresh token.

概率分布用于限制签名所需的CPU使用率。

另一种方法是实现一个API(例如GET /token ),该API将仅验证提供的JWT,如果有效,则生成新的新JWT作为响应。 通过这种方法,“何时刷新”逻辑被移至客户端。 客户端应决定何时调用/token API以刷新其令牌。 通常,这是在Web应用程序/移动应用程序启动时完成的。 如果使用JWT进行服务器到服务器的通信,则每隔n分钟进行一次。

我认为,第二种方法是可取的。

从我的角度来看,这并不是一个好主意。 问题不是安全问题,而是逻辑问题。

您正在将对资源的访问与令牌的发行混合在一起。 如果客户端需要令牌,则应明确要求新令牌并联系专用端点。 如果令牌已过期,则您的服务器可能需要其他信息(刷新令牌,凭证材料的验证...)。

通过您的流程,客户端将收到未要求的令牌。 此外,除了您的应用程序逻辑外,您的客户端还必须检查每个单独请求是否存在新令牌。 如果旧的令牌过期,它可能会丢失新的访问令牌并失去访问权限。

最后但并非最不重要的是,这个新令牌可能是无用的,并且永远不会被客户端使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM