为什么需要刷新令牌,而刷新时间可以简单地存储在服务器端?

问题描述 投票:0回答:2

我不太确定为什么刷新令牌是必需的,而我们可以简单地存储一个刷新时间,它映射到与刷新令牌的到期日期相同的东西,并且根本没有刷新令牌。

我知道出于许多安全原因,拥有长期访问令牌并不好,因此使用了刷新令牌。

但是我可以通过在以下情况下使用短期访问令牌来实现与刷新令牌完全相同的行为:身份验证器可以拥有自己的数据库,用于存储访问令牌本身,以及作为普通整数的刷新时间。如果访问令牌已过期,则会检查此刷新时间,并根据此刷新时间是否也已过期来重新发布或不重新发布访问令牌。你可能会说延迟方面这需要大量不必要的数据库调用,但这一切都可以很容易地缓存在服务器端,因此可以避免。

所以我的问题很简单:为什么刷新令牌是必要的(并将其来回发送给客户端),而所有短期令牌(访问令牌)的刷新都可以用一个简单的刷新时间整数来处理?

access-token refresh-token
2个回答
0
投票

访问令牌在许多分布式系统中是不可撤销的。为了降低访问令牌被盗的风险,这些令牌是短暂的。

显然,短期访问令牌给客户带来了极大的不便。因此,有一个刷新令牌的想法——当访问令牌过期时,使用刷新令牌来获取更新的访问令牌。

访问令牌和刷新令牌之间的主要区别在于刷新令牌是可撤销的。

如果用户受到威胁,将发生以下步骤:

  • 系统会撤销refresh token(比如直接在服务端删除)
  • 访问令牌最终会在客户端过期
  • 客户端将调用系统并撤销刷新令牌,该步骤将无法强制用户重新进行身份验证

0
投票

我相信我找到了原因。

如果访问令牌在存储到数据库的场景中被泄露,即使访问令牌过期,认证者也将始终返回一个访问令牌,因为无法了解请求者是否是恶意的。

但是如果我也将刷新令牌发送给客户端,并且有人只使用访问令牌发出请求,服务将立即知道它是否来自恶意请求者。

我想问题就变成了,是否真的存在这样一种情况,访问令牌可能会受到损害但刷新令牌不会受到损害,但我认为这是另一篇文章的问题。

© www.soinside.com 2019 - 2024. All rights reserved.