如何实施刷新令牌轮换?

Sap*_*een 6 node.js oauth-2.0 jwt refresh-token

如果我正确理解了刷新令牌轮换,这意味着每次我们请求新的访问令牌时,我们也会获得一个新的刷新令牌。如果多次使用刷新令牌 - 我们会使某个用户之前使用的所有刷新令牌失效,并且用户必须再次执行身份验证过程。

  1. 这是否意味着我们需要将所有刷新令牌(所有旧的)存储在数据库中?

  2. 难道我们不能简单地存储最后一个刷新令牌(尚未使用),并且对于每个获取新访问令牌的请求,我们将检查请求中发送的刷新令牌是否在数据库中,如果那么,我们将创建一个新的访问和刷新令牌并覆盖数据库中的旧刷新令牌,以便旧的刷新令牌不能用于获取新令牌?

  3. 这样的刷新令牌应该存在多久?

Mic*_*ski 3

  1. 是的,但“全部”通常意味着“在给定时间范围内全部”。时间范围将取决于您的需求 - 您希望能够识别任何潜在的刷新令牌泄漏需要多长时间。

  2. 可以,但是与不使用令牌轮换相比,您不会获得更好的安全性。这是因为您永远不知道谁首先使用了当前令牌 - 合法用户,还是窃取了您令牌的恶意用户。如果是后者,那么她现在将可以访问工作访问/刷新令牌对。合法用户将留下无效令牌。

  3. 这取决于您的要求、功能、安全性等。您通常会发现刷新令牌的有效期应为几个小时(通常最多 8 个小时),但我设置了刷新令牌的有效期为几天甚至几个月。