spring-boot - 如何处理 JWT token 过期?

标签 spring-boot jwt bearer-token

我正在使用 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/

相关文章:

python - 在python中仅从JWT获取解码的有效载荷

mysql - Spring boot Multi-Tenancy ,一个租户连接到多个模式

c# - JWT验证失败

java - 为 spring 项目配置 liquibase

jwt - 发布项目后出现异常 "System.Security.Cryptography.CryptographicException"

flutter User.Read azure Active Directory "Insufficient privileges to complete the operation"

encryption - Bearer token (OAuth2) 是如何创建的?

从 Postman 生成 Azure 访问 token

java - 我如何在没有存储库的情况下实现分页休息 Spring

spring - docker镜像运行无法在Spring Boot Gradle中访问API