如何实施刷新令牌轮换?

How do I implement Refresh Token Rotation?

如果我对refresh token rotation的理解是对的,那就意味着每次我们请求一个新的access token的时候,我们也会得到一个新的refresh token。如果多次使用刷新令牌 - 我们会使某个用户之前使用的所有刷新令牌无效,并且用户必须再次完成身份验证过程。

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

  2. 我们不能简单地存储最后一个刷新令牌,只有一个(尚未使用),并且对于每个获取新访问令牌的请求,我们将检查刷新令牌是否已发送in the request is in the database,如果是的话,我们会创建一个新的access and refresh token并覆盖数据库中旧的refresh token,这样旧的refresh token就不能用来获取新的token了?

  3. 此类刷新令牌应存在多长时间?

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

  2. 可以,但是没有比不使用令牌轮换更好的安全性。这是因为您永远不知道谁先使用了当前令牌 - 合法用户还是恶意用户,他们窃取了您的令牌。如果是后者,那么她现在可以访问有效的 access/refresh 令牌对。合法用户将留下无效令牌。

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