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

时间:2016-06-08 07:43:24

标签: php oauth2 oauth2client

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

有人能指出我正确的方向如何实现这个或者为此目的使用库吗?

2 个答案:

答案 0 :(得分:0)

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

  1. 申请另一个令牌
  2. 刷新现有令牌。许多OAuth2提供商都提供此功能。
  3. 唯一的问题是您使用的库是否内置。如果没有,也许您可​​以自己添加。

    修改

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

答案 1 :(得分:0)

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

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

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

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