为啥使用 JWT 刷新令牌

Posted

技术标签:

【中文标题】为啥使用 JWT 刷新令牌【英文标题】:Why use JWT refresh token为什么使用 JWT 刷新令牌 【发布时间】:2019-04-18 20:32:42 【问题描述】:

我不确定我是否理解刷新令牌的概念。我知道他们在做什么 - 将它们存储在某个地方,并且每当访问令牌过期时,都可以获得一个新的访问令牌。

不泄露此刷新令牌显然非常重要,否则第三方可以使用它获取新的访问令牌。因此,它需要保持额外的安全。

我的问题是:为什么不让长期使用的访问令牌更加安全?安全性的区别在哪里?

下面是 auth0.com 对这一事实的描述,例如:

好处:泄露的访问令牌的访问窗口更短(这些令牌很快过期,减少了泄露令牌允许访问受保护资源的机会)"

这对我来说没有任何意义。所以访问令牌很快就会过期,因此如果它被泄露它是“不错的”。

另一方面,如果刷新令牌泄露,则非常糟糕。那么,为什么不尝试让访问令牌与刷新令牌一样安全,并获得完全相同的结果,但要管理的令牌更少呢?

【问题讨论】:

Why Does OAuth v2 Have Both Access and Refresh Tokens?的可能重复 JWT (JSON Web Token) automatic prolongation of expiration的可能重复 【参考方案1】:

有时考虑问题的另一面会有所帮助,例如令牌发行者,而不是令牌所有者。

示例

假设某人的帐户已被管理员删除/阻止。

使用令牌系统,没有办法使所有当前令牌无效 - JWT 样式令牌的主要要点是拥有有效令牌可以避免集中检查(实际上,同样是会话 cookie 也是如此)。

单令牌系统的问题

因此,为了提高效率/方便,在单一令牌设置中,该令牌的生命周期有时会非常长,这意味着所有者(bearer)可以访问数小时或数天。亲爱的。

解决方案:刷新令牌

正如 Auth0 指南所说,刷新令牌系统允许在需要完成刷新之前缩短这种正常的生命周期(例如,缩短到几分钟或几秒)。在这个点,服务器/集中控制可以检查该帐户是否已被阻止或权限仍然有效,并相应地发出新的访问令牌。它仍然足够长以提供不一直调用身份验证流(当然发送凭据)的性能提升

另一个用例

类似的用例是用户丢失了手机/设备,他们需要(有效地)撤销其拥有的令牌。 希望对您有所帮助。

【讨论】:

以上是关于为啥使用 JWT 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

JWT, 为啥需要刷新令牌?

为啥不将 JWT 访问令牌存储在内存中并在 cookie 中刷新令牌?

为啥在每个请求上刷新 JUST 令牌是个坏主意?

过期后使用刷新令牌获取访问令牌(JWT)

刷新令牌和 JWT 令牌交互

使用 JWT 刷新令牌如何安全?