【问题标题】:When should we refresh access token in frontend?我们什么时候应该在前端刷新访问令牌?
【发布时间】:2021-08-29 14:16:32
【问题描述】:

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

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

我看到两个选项:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我建议您将选项 2 作为您的默认行为,因为它会为您提供弹性应用。每个 OAuth 客户端都应该这样做,因为在某些设置中,有时也会因为基础设施原因而收到 401,例如令牌签名证书更新。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 1970-01-01
      • 2023-03-10
      • 2021-08-29
      • 1970-01-01
      • 2017-01-18
      • 2018-08-27
      • 2018-09-21
      • 2020-01-20
      相关资源
      最近更新 更多