我们应该与访问令牌一起更新刷新令牌吗?

Posted

技术标签:

【中文标题】我们应该与访问令牌一起更新刷新令牌吗?【英文标题】:Should we renew refresh tokens along with access tokens? 【发布时间】:2021-08-29 16:26:50 【问题描述】:

假设成功登录后,我们正在传递用户短期访问令牌(15 分钟)和长期刷新令牌(7 天)。

在第 7 天,用户在我们的应用程序中处理一些业务逻辑,他的刷新令牌过期。因此,如果刷新令牌过期,他将在我们的应用中进行某些业务时被注销。

那么如何避免这种情况呢? 我们是否应该以某种方式更新刷新令牌?

【问题讨论】:

【参考方案1】:

会话到期是您需要编写代码的标准行为,因为刷新令牌不能也不应该永远持续下去。

如果用户让他们的浏览器在夜间运行,然后第二天早上返回应用程序,这种情况在工作设置中很常见。该逻辑通常涉及以下步骤:

令牌刷新返回错误代码为“invalid_grant”的错误,应用可以检查该错误 应用程序必须重定向用户以重新进行身份验证,之后他们才能继续工作 在重定向之前,应用会存储用户的应用位置和当前页面状态,例如在会话存储中 重定向后应用恢复位置和页面状态

即使用户正在提交表单,这也有效。需要注意的是,您当然不应该在 UI 存储中保存诸如信用卡号之类的高安全性字段 - 因此用户需要在从登录返回后重新输入这些值。

您可以很容易地实现这一点,就像在this sample code of mine 中一样,这可能会给您一些关于您自己的解决方案的想法。

【讨论】:

以上是关于我们应该与访问令牌一起更新刷新令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章

JWT 刷新令牌必须有啥声明?它可以与访问令牌相同(具有更长的exp)吗?

JWT 身份验证方案中的刷新令牌是不是应该使用与访问令牌不同的秘密进行签名?

什么是刷新令牌,我们可以控制刷新 AADB2C 中的 ID 和访问令牌吗?

访问和刷新令牌

JWT, 为啥需要刷新令牌?

如何使用刷新令牌更新访问令牌?