如何处理 JWT 令牌过期?

han*_*man 7 jwt spring-boot bearer-token

我正在使用 Spring Boot 实现 jwt。我们创建了一个结构,其中登录过一次的用户拥有已发行的令牌值,并在再次登录时发送令牌值。过期时间设置为一天(86400 秒)。

ExpiredJwtException io.jsonwebtoken.ExpiredJwtException: JWT expired at 2021-11-21T04:25:31Z. Current time: 2021-11-22T03:45:58Z, a difference of 84027224 milliseconds.  Allowed clock skew: 0 milliseconds.
Run Code Online (Sandbox Code Playgroud)

上述异常是因令牌过期而引发的。由于此令牌已过期,我想刷新令牌以向用户颁发新令牌。我应该怎么办?

小智 9

简而言之,当ACCESS_TOKEN时需要使用REFRESH_TOKEN来获取​​新的ACCESS_TOKEN。

JWT 有两种令牌:ACCESS_TOKEN 和 REFRESH_TOKEN。

ACCESS_TOKEN:当用户登录时,授权服务器会颁发访问令牌,这是客户端应用程序可用于对 API 服务器进行安全调用的工件。

刷新令牌: ACCESS_TOKEN 的寿命很短。因此,当 ACCESS_TOKEN 过期时,REFRESH_TOKEN 用于获取新的 ACCESS_TOKEN。

所以综上所述,授权成功后需要颁发两个token ACCESS_TOKEN 和 REFRESH_TOKEN。当 ACCESS_TOKEN 过期时,您需要使用 REFRESH_TOKEN 调用另一个 api 来获取新的 ACCESS_TOKEN。

只要刷新令牌有效且未过期,客户端应用程序就可以获得新的访问令牌。因此,具有很长生命周期的刷新令牌理论上可以为令牌持有者提供无限的权力,以随时获取新的访问令牌来访问受保护的资源。因此,您需要设置一个策略,确定要为给定的 REFRESH_TOKEN 提供 ACCESS_TOKEN 的时间。