OAuth access_token 的典型生命周期是多少?

What's a typical life time for an OAuth access_token?

我正在与一家实施 OAuth 的公司合作,目前他们提供的 access_token 生命周期为 180 秒。这对我来说似乎很短,所以我试图从其他公司在网络上所做的事情中找出 典型 生命周期 access_token 是多少。

我在网上看到:

所以在我看来 180 秒太短了,因为它会迫使开发人员不断地使用 refresh_token 来请求新的 access_token

有什么建议吗?

编辑:起初我问的是"What's a reasonable life time for an OAuth access_token?"。我已将问题更改为 "What's a typical life time for an OAuth access_token?",因为我认为这更接近我的实际意思。

简答:

什么是合理的完全取决于公司政策及其 OAuth 实施。

长答案:

访问令牌的生命周期实际上取决于令牌的供应商,即您的合作伙伴公司的授权服务器及其策略。

我同意 3 分钟很短,但公司的安全政策可能要求在撤销某些权限或删除帐户时,在不超过 3 分钟内禁用基于这些权限授予访问权限的客户的访问权限.事实上,这是以相当大的网络和处理开销为代价的(希望如此)。

该决定的成本(如:开销)还取决于令牌本身的使用情况。它不经常使用但总是以突发模式使用,开销可能相对较低。如果经常使用,但是每次只调用一个API,那么开销就比较大,成本也比较高。

大多数环境不需要当场立即删除所有委派访问权限,并且会发现处理至少 1 小时的延迟是可以承受的。

另一方面,Twitter 和 Facebook 正在以这样一种方式实现 OAuth,即它们可以提供长期访问令牌:当资源服务器收到访问令牌时,与颁发令牌的帐户关联的权限是检查。当然,出于性能原因,资源服务器将缓存这些结果(为了讨论,假设持续 3 分钟)但实际上它会产生相同的结果,将 "refresh overhead" 推送到资源服务器而不是客户。 (请注意,这在某种程度上违背了使用结构化独立访问令牌(例如 JWT)的目的)。

如果您不need/want在合理的范围内再次显式验证您的客户,Twitter 和 Facebook 的方法就会奏效。由于 Twitter 和 Facebook 也不经常对其用户进行身份验证,因此这种方法对他们来说很有意义。

我猜你可以说每个用例都是不同的:这完全取决于你想要什么以及你如何实现它。你的公司和 Facebook 可能没有可比性,因为它们有不同的令牌、资源服务器实现和对客户端(和用户)身份验证的限制。