【问题标题】:How to implement Refresh Token rotation如何实现刷新令牌轮换
【发布时间】:2022-01-04 03:38:49
【问题描述】:

我对这个访问令牌和刷新令牌完全陌生,如果在任何地方有错误,请纠正我。据我所知,刷新令牌轮换意味着每次用户请求 AT(具有有效 RT)时,都会给出新的 AT1 和 RT1 对。所以下次用户应该使用新的RT1来更新AT,并且会得到一对新的AT2和RT2。

我的问题是:

  1. 要实现 RT Rotation,我们需要将 RT 存储在数据库中。那么我们需要将哪个 RT 存储在数据库中是旧的还是新发布的 RT。根据this,我们需要存储所有过期的RT,并且需要检查每个AT 更新请求的数据库,如果它在数据库中,那么我们需要立即使刷新令牌系列无效。但是如果我们这样做,我们可能需要为单个用户在数据库中存储更多的 RT,这在考虑系统中的所有用户时将是巨大的。如果不是,它是实现 RT Rotation 的正确方法吗?实现 RT Rotation 的正确方法是什么?

  2. Documentation 关于 RT 轮换(在自动重用检测第 4 点下)中,他们这样提到 立即使刷新令牌系列无效。这是否意味着从初始身份验证发出的每个 RT 都将具有任何相同的特征来将它们识别为一个令牌系列(因为它被称为刷新令牌系列)

  3. 当用户从系统注销时,我们如何使 RT 无效?我不认为简单地从 cookie 中删除 RT 不是正确的方法,因为例如如果 RT 的过期时间是一天并且用户在其过期时间之前注销仍然可以使用 RT (除非我们将之前的 RT 存储在 DB 中并检查 AT 的下一次更新),直到达到其到期时间。那么如何解决呢。

【问题讨论】:

    标签: authentication oauth-2.0 jwt access-token refresh-token


    【解决方案1】:

    广告 1。您可以采取任何一种方式 - 将当前 RT 存储在 DB 中并检查它是否存在,或者存储所有使用的 RT 并检查当前 RT 是否不存在。要么会工作。使用后一个选项,如果您看到有人试图重复使用 RT,您将获得能够撤销所有 RT 的额外好处。另一方面,正如您所指出的,这可能意味着数据库将变得非常大。这就是您在设计系统时必须做出的决定:我想提供更好的 RT 安全性,但我需要在更大的数据库上花更多的钱。

    当然,您不必无限期地保留所有令牌。检查某人是否重复使用了两年前的令牌没有任何附加价值。

    广告。 2. 不同的系统可以有不同的方式来决定什么是“刷新令牌系列”,但我会说这些是为给定用户和客户端发布的令牌。也许在某些情况下,您可以将其限制为给定的受众。在某些 Identity Server 中,您将保存某种同意对象以及与此同意对象相关的令牌。这也可以很好地识别您需要撤销的所有令牌。

    广告。 3. 访问和刷新令牌并不意味着用作会话机制。令牌刚刚过期,没有用户注销的概念。如果您真的想要这种功能,您将必须在数据库中保留有关令牌的信息以及用户是否已主动注销的信息。如果是这样,那么您可以拒绝这些令牌。不过,这是一种解决方法,在这种情况下,通常使用会话会更直接。

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 2022-09-24
      • 2020-11-09
      • 2021-07-11
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多