太频繁地更新访问令牌是不好的做法吗?

Posted

技术标签:

【中文标题】太频繁地更新访问令牌是不好的做法吗?【英文标题】:Is it bad practice to renew an access tokens too often? 【发布时间】:2018-11-27 02:32:36 【问题描述】:

我正在使用一个 RESTful 服务,该服务给我一个有效期为一小时的访问令牌。每次收到来自服务器的响应时,我都会检查令牌是否已过期,如果已过期,我会更新它并再次发送请求。

但这让我开始思考:是什么让我每次提出请求时都无法获得新令牌?如果我只是在每个请求之前发送一个新令牌请求而不是在令牌实际过期时处理异常,我会保存几行代码。是否有任何技术原因可以避免这种情况?

【问题讨论】:

【参考方案1】:

是什么让我每次提出请求时都无法获得新令牌?

没有什么能阻止您在每个请求中获取新令牌。您将节省几行代码,但对应的是它会增加对授权服务器的请求数。

您拥有的令牌应该在 1 小时内有效。您不必询问它是否对每个请求仍然有效。只需使用 and ,当资源服务器返回 401 HTTP 响应时,您就对其进行更新。

【讨论】:

【参考方案2】:

如果您在每次通话时都发出请求,则可能会导致一些延迟问题。小时窗口真的很大,对于每个请求,如果您拨打电话,您最终会拨打太多电话,只是为了在您所拥有的一切都很好时获得令牌。 话虽如此,通常访问令牌的有效期在 5 到 10 分钟之间(如果它的有效期更长,则没有任何问题,但这不是它们的使用方式)。您不应该等待从服务器获取 401 来刷新令牌。甚至在调用服务器之前,您都可以检查 AT 是否会在接下来的 1 分钟内过期,如果是,那么您刷新令牌。

在代码中添加几行是一个很好的权衡,如果您可以根据您的请求减少几毫秒。您节省的时间可以累积并降低延迟

它为您节省的时间是获取访问令牌所花费的时间。

【讨论】:

以上是关于太频繁地更新访问令牌是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

在页面重新加载之间直接访问 redux 存储以访问和保持状态是一种不好的做法吗

在数据库而不是假存储库上运行测试是不好的做法吗?

REST 安全性,使用基本身份验证和 jwt 令牌验证是一种不好的做法吗?

为啥直接从 Servlet 访问 DAO 是一种不好的做法?

我们应该与访问令牌一起更新刷新令牌吗?

正在使用 microtime() 生成密码重置令牌不好的做法