为什么要使用 JWT 刷新令牌

Why use JWT refresh token

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

不泄露此刷新令牌显然非常重要,否则第三方可能会用它获取新的访问令牌。因此需要格外注意安全。

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

auth0.com 是这样描述这个事实的,例如:

Benefit: Shorter windows of access for leaked access tokens (these expire quickly, reducing the chance of a leaked token allowing access to a protected resource)"

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

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

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

例子

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

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

单一令牌系统有问题

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

解决方案:刷新令牌

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

另一个用例

一个类似的用例是用户丢失了 phone / 设备并且 他们 需要(有效地)撤销它拥有的令牌。 希望能有所帮助。