【问题标题】:How do I handle JWT token expiration?如何处理 JWT 令牌过期?
【发布时间】:2021-12-31 18:08:10
【问题描述】:

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

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

【问题讨论】:

  • 你想要的是 Oauth2 实现,你有刷新令牌和访问令牌,访问令牌是短暂的令牌,可以根据配置在几个小时内过期,而刷新令牌用于生成新的访问令牌。并继续当前的功能。

标签: spring-boot jwt bearer-token


【解决方案1】:

总之,你需要在ACCESS_TOKEN过期时使用REFRESH_TOKEN来获取新的ACCESS_TOKEN。

JWT 有两种令牌:ACCESS_TOKEN 和 REFRESH_TOKEN。

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

REFRESH_TOKEN: ACCESS_TOKEN 的寿命很短。所以当 ACCESS_TOKEN 过期时,REFRESH_TOKEN 用于获取新的 ACCESS_TOKEN。

所以总而言之,当授权成功时,您需要发出两个令牌 ACCESS_TOKEN 和 REFRESH_TOKEN。当 ACCESS_TOKEN 过期时,您需要使用 REFRESH_TOKEN 调用另一个 api 来获取新的 ACCESS_TOKEN。

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

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 2021-11-04
    • 2020-03-24
    • 2017-03-04
    • 2019-07-04
    • 1970-01-01
    • 2016-11-13
    • 2023-03-20
    相关资源
    最近更新 更多