0

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

谁能指出我正确的方向如何实现这个或为此目的使用一个库?

4

2 回答 2

0

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

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

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

编辑

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

于 2016-06-08T08:41:24.507 回答
0

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

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

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

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

于 2016-06-08T09:30:53.920 回答