尝试进行身份验证时 JWT 令牌过期?

Posted

技术标签:

【中文标题】尝试进行身份验证时 JWT 令牌过期?【英文标题】:Expired JWT Token when trying to authenticate? 【发布时间】:2019-12-05 19:48:06 【问题描述】:

我是第一次使用 JWT,我很难理解它的完整工作方式,每次我找到 simethong 的解决方案时,都会弹出另一件事。

我在发送正确的用户名和密码之前尝试进行身份验证,当我使用 Postman 时,我得到了一个令牌。

我离开项目几个小时又回来了,现在当我尝试进行身份验证时,我收到了这个错误:


    "code": 401,
    "message": "Expired JWT Token"

我不知道如何解决,因为我不知道我可能会遇到这样的问题。

任何帮助将不胜感激。

【问题讨论】:

如果您使用的是 API 并且我理解正确,那么这是不言自明的。您的令牌已过期,JWT 通常会在他们的iat 一个小时后这样做。您需要重新生成一个新令牌并使用它进行请求。 是的,您的令牌已过期,需要重新获取。 【参考方案1】:

是这样的:

您发出第一个 api 请求,传递您的凭据,获取令牌并将其存储在某处。

之后,您应该将该令牌(通过“Bearer”标头字段)与所有其他请求一起传递,以便服务器可以识别您。

但该令牌不会永远有效。一段时间后(TTL)它会过期,你会收到这样的消息。然后你必须重复认证才能获得新的令牌。

所以只需重复您在开始时提出的请求,再次传递凭据,再次收集和存储新令牌并像以前一样继续使用它。

【讨论】:

【参考方案2】:

如果您使用LexikJWTAuthenticationBundle,您可以在配置/包中的lexik_jwt_authentication.yaml 中为JWT 设置TimeToLive

token_ttl: 属性用于以秒为单位设置令牌的TimeToLive(例如,604800 等于 7 天)。

【讨论】:

以上是关于尝试进行身份验证时 JWT 令牌过期?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 JWT 不记名身份验证在令牌说 5 分钟后将令牌识别为过期?

使用 JWT 和刷新令牌对移动应用程序进行身份验证

使用访问令牌和刷新令牌保持身份验证

Django Rest Framework 避免身份验证 JWT

使用 Jwt 的基于令牌的身份验证无法授权

Laravel JWT 身份验证