gpt4 book ai didi

authentication - 如何实现 Refresh Token 轮换

转载 作者:行者123 更新时间:2023-12-05 02:35:24 27 4
gpt4 key购买 nike

我是这个访问 token 和刷新 token 的新手,如果有任何地方有误,请指正。据我所知,刷新 token 轮换意味着每次用户请求 AT(具有有效 RT)时,都会提供新的 AT1 和 RT1 对。所以下次用户应该使用新的RT1来更新AT,并且会得到一对新的AT2和RT2。

我的问题是:

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

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

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

最佳答案

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

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

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

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

关于authentication - 如何实现 Refresh Token 轮换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70573848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com