我正在使用 Spring Boot 实现 jwt。我们创建了一个结构,其中登录过一次的用户具有颁发的 token 值,并在再次登录时发送 token 值。过期时间设置为一天(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.
上述异常是针对过期 token 抛出的。由于此 token 已过期,我想刷新 token 以向用户颁发新 token 。我该怎么办?
最佳答案
简而言之,当ACCESS_TOKEN过期时,您需要使用REFRESH_TOKEN来获取新的ACCESS_TOKEN。
JWT 有两种 token :ACCESS_TOKEN 和 REFRESH_TOKEN。
ACCESS_TOKEN:当用户登录时,授权服务器会发出访问 token ,这是客户端应用程序可用于对 API 服务器进行安全调用的工件。
REFRESH_TOKEN: ACCESS_TOKEN 的生命周期很短。因此,当 ACCESS_TOKEN 过期时,REFRESH_TOKEN 用于获取新的 ACCESS_TOKEN。
所以综上所述,当授权成功时,你需要发出两个token ACCESS_TOKEN和REFRESH_TOKEN。当 ACCESS_TOKEN 过期时,您需要使用 REFRESH_TOKEN 调用另一个 api 以获取新的 ACCESS_TOKEN。
只要刷新 token 有效且未过期,客户端应用程序就可以获得新的访问 token 。因此,具有很长生命周期的刷新 token 理论上可以赋予 token 持有者无限的权力来获取新的访问 token 以随时访问 protected 资源。因此,您需要为给定的 REFRESH_TOKEN 授予 ACCESS_TOKEN 多长时间设置策略。
关于spring-boot - 如何处理 JWT token 过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70060722/