我们什么时候应该在前端刷新访问令牌?

时间:2021-06-13 10:39:00

标签: security authentication jwt access-token refresh-token

假设我们有短期访问令牌(15 分钟)和长期刷新令牌(7 天)。

我们什么时候应该要求后端刷新访问令牌?

我看到两个选项:

  1. 在用户登录后,我们开始倒计时,以在访问令牌到期前一分钟自动刷新令牌。
  2. 我们没有实现计时器,我们只会在收到来自后端的 401 响应时才尝试刷新访问令牌。

在第一个选项中,我看到了一个优势 - 如果访问令牌和刷新令牌将过期并且用户停留在页面上,没有采取任何行动,他也不会发送任何 http 请求,因为计时器仍然有效并且用户会自动注销。

在第二个选项中 - 如果访问令牌和刷新令牌将过期,则仅当用户在页面上执行某些操作时才会注销,例如:离开页面或发出 http 请求。 如果他留在页面上,他将不会自动退出。

有什么比前端更好的实现方式?

1 个答案:

答案 0 :(得分:0)

我会推荐选项 2 作为您的默认行为,因为它将为您提供一个有弹性的应用程序。每个 OAuth 客户端都应执行此操作,因为在某些设置(例如令牌签名证书续订)中,有时也会因基础架构原因收到 401。

选项 1 是一种优化,如果您想减少来自 API 的 401 响应。但是,如果您不小心,它可能会导致错误地开发客户端和 API。我个人从不使用它。

请注意,访问令牌会返回 expires_in 字段,但刷新令牌没有等效字段,因此除非您开发自定义解决方案,否则客户端无法检测用户会话何时到期。

在对 API 调用进行编码时,建议这样做,如 this sample code of mine

  • 收到 401 时尝试刷新令牌
  • 成功后重试 API 调用 - 仅一次
  • 失败时重定向用户重新进行身份验证

出于兴趣,有一个上述应用程序的在线版本,可让您测试 OAuth 到期事件以查看其行为 - 请参阅我的 Quick Start 页面