如何在资源请求上重新生成刷新令牌和访问令牌?

Posted

技术标签:

【中文标题】如何在资源请求上重新生成刷新令牌和访问令牌?【英文标题】:How to regenerate Refresh Token and Access Token on Resource Request? 【发布时间】:2021-08-23 14:45:36 【问题描述】:

我正在尝试实现 JWT 令牌(访问令牌和刷新令牌),但在请求具有过期访问令牌的受保护资源时遇到了问题,而刷新令牌仍然有效。

我知道我不应该使用刷新令牌来请求资源,刷新令牌应该用于授权验证器以重新验证/重新生成访问令牌。

在我的应用程序中,用户可以使用有效凭据通过 POST 请求登录,以获取访问令牌(1 分钟内到期)和刷新令牌(10 分钟内到期)。现在说用户在登录后 30 秒发出请求并发送两个令牌,然后检查令牌并返回资源。如果现在用户在 2 分钟后发出请求并发送令牌,他的访问令牌无效,在这种情况下,我该如何继续请求并重新验证令牌。

我可以考虑使用中间件来验证和提供令牌并将其与响应一起发送,但这是正确的方法吗? 然后我需要在客户端处理和恢复每个响应的令牌。不是吗?

另外,我不想提示用户重新登录。我在服务器上使用 Node 和 Express,在客户端上使用 React。

【问题讨论】:

【参考方案1】:

这是您的步骤:

    尝试登录 令牌无效时从服务器接收 401 通过发出新的刷新请求来请求新的访问令牌。 设置新的访问令牌和刷新令牌 重试原始请求

这必须在客户端完成,因为它是获得授权验证的受众。

通常我们不会将访问令牌设置为每分钟过期一次,因为所描述的过程会给该过程增加太多延迟。

从@MComment 编辑:

5 分钟用于访问令牌,30 分钟最多几个小时是通常建议分别用于访问和刷新令牌的时间。通常授权服务器提供“滚动刷新” - 刷新令牌的到期时间会在您使用时更新。这样,只要用户积极使用网站,他们就会保持登录状态

【讨论】:

5 分钟用于访问令牌,30 分钟最多几个小时是通常建议分别用于访问和刷新令牌的时间。通常授权服务器提供“滚动刷新” - 刷新令牌的到期时间会在您使用时更新。这样,只要用户积极使用该网站,他们就会保持登录状态。【参考方案2】:

您可以在每个请求中更新访问令牌的过期日期,无需重新生成令牌。 我认为您设置的会话时间不正常,建议使用。 如果您不希望用户必须重新登录,请制作一个永久刷新令牌,在 reactjs 中创建一个函数,以便在过期令牌时通过刷新令牌重新生成访问令牌。 仅当您想从该客户端注销时才撤销刷新令牌。

【讨论】:

以上是关于如何在资源请求上重新生成刷新令牌和访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用外部登录提供程序创建刷新令牌?

如何使用两个令牌(访问/刷新)进行授权(nodejs,express)

如何使用刷新令牌来请求使用ADAL的科尔多瓦多个资源

身份服务器刷新令牌资源所有者密码凭证流

如何保护刷新令牌?

如何使用 JWT 刷新令牌生成新的访问令牌