如何在资源请求上重新生成刷新令牌和访问令牌?
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 中创建一个函数,以便在过期令牌时通过刷新令牌重新生成访问令牌。 仅当您想从该客户端注销时才撤销刷新令牌。
【讨论】:
以上是关于如何在资源请求上重新生成刷新令牌和访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章