带有刷新令牌的 OAuth 2.0 - 我可以为每次调用获取新的访问令牌吗?
OAuth 2.0 with refresh token - can I just get new access token for each call?
我正在使用受 OAuth 2.0 保护的 Web 服务。一旦我获得了原始的 access_token 和 refresh_token,我必须实现以下逻辑:
- 判断
access_token
是否不再有效(响应401)
- 使用
refresh_token
请求新的 access_token
- 使用新的
access_token
重复原始请求
我希望该应用程序每分钟执行有限数量的调用,获取少量数据。在这种情况下,我可以通过为每个请求获取一个新的 access_token 来简化这个逻辑吗?
- 请求
access_token
使用 refresh_token
- 使用新的
access_token
继续请求
这在技术上是可行的,但破坏了 access_token
和 refresh_token
之间拆分的 OAuth 2.0 设计。我宁愿让您的授权服务器颁发在特定时间段内有效但跨越 "security interval" 的访问令牌,即您可以让客户端独立于可能实施的检查运行的时间间隔授权服务器。
此外,您可能会在授权响应 expires_in
参数中获得有关令牌生命周期的提示。您可以使用它在令牌到期前不久停止使用令牌,并按照您建议的方式获得一个新令牌,这样就不会首先失败。
当然,您的代码仍然需要能够处理故障,但即使在您描述的情况下,它仍然需要这样做。
我正在使用受 OAuth 2.0 保护的 Web 服务。一旦我获得了原始的 access_token 和 refresh_token,我必须实现以下逻辑:
- 判断
access_token
是否不再有效(响应401) - 使用
refresh_token
请求新的 - 使用新的
access_token
重复原始请求
access_token
我希望该应用程序每分钟执行有限数量的调用,获取少量数据。在这种情况下,我可以通过为每个请求获取一个新的 access_token 来简化这个逻辑吗?
- 请求
access_token
使用refresh_token
- 使用新的
access_token
继续请求
这在技术上是可行的,但破坏了 access_token
和 refresh_token
之间拆分的 OAuth 2.0 设计。我宁愿让您的授权服务器颁发在特定时间段内有效但跨越 "security interval" 的访问令牌,即您可以让客户端独立于可能实施的检查运行的时间间隔授权服务器。
此外,您可能会在授权响应 expires_in
参数中获得有关令牌生命周期的提示。您可以使用它在令牌到期前不久停止使用令牌,并按照您建议的方式获得一个新令牌,这样就不会首先失败。
当然,您的代码仍然需要能够处理故障,但即使在您描述的情况下,它仍然需要这样做。