在消费者处处理 OAuth 2.0 令牌过期

Dealing with OAuth 2.0 Token expiration at the Consumer

我有一个客户端应用程序,它使用具有授权授予类型资源所有者密码凭证的 oauth2。当用户提供她的凭据时,我写了一个 curl http 请求来获取访问令牌,但是当第一个访问令牌过期时如何请求另一个访问令牌。我读到估计访问令牌的有效性很好。 I found this client library 但我认为它不会解决我在新访问令牌过期后甚至刷新令牌也过期时请求新访问令牌的问题。

任何人都可以指出正确的方向如何实现这个或为此目的使用库吗?

您收到的 OAuth2 令牌将包含持续时间。每个令牌在设定的时间后过期,并且该信息作为您收到的对象的一部分发回。因此,您可以将其存储在本地并重复使用,直到过期时间过去。 一旦过期,您有两个选择:

  1. 请求另一个令牌
  2. 刷新现有令牌。许多 OAuth2 提供商都提供此功能。

唯一的问题是您使用的库是否内置了该库。如果没有,您可以自己添加。

编辑

如果您想将令牌存储在某个地方,那么 Session 将起作用。当用户在达到主机本身设置的超时期限时关闭浏览器位时,会话不会过期。公平地说,如果他们稍后重新打开应用程序,他们将不得不再次登录,此时您可以请求另一个令牌。如果您决定使用刷新令牌功能,那么将其存储在数据库本身并从那里使用它是有意义的,因为这是一个长期的事情,而不是基于会话的事情。

您可以处理令牌过期错误并执行刷新令牌请求以获取新的访问令牌,而不是为每个资源请求检查令牌过期。

oAuth 服务器通常应在访问令牌无效、过期或撤销时在其响应中提及 invalid_grant。参考 here。您应该检查您的 oAuth 服务器在令牌过期时它提供的准确响应。

有些库确实包含此功能,但我没有找到您提到的库。我使用 Retrofit 作为 java 客户端,它有这个。您可能想为您提到的库请求此功能。

如果刷新令牌过期,oAuth 授权流程应重新开始。