【问题标题】:Dealing with OAuth 2.0 Token expiration at the Consumer在消费者处处理 OAuth 2.0 令牌过期
【发布时间】:2016-06-08 17:30:53
【问题描述】:

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

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

【问题讨论】:

    标签: php oauth2 oauth2client


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      编辑

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

      【讨论】:

      • 会话是存储访问令牌和过期时间的好选择吗?但在这种情况下,如果用户关闭他的浏览器,他需要再次进行身份验证。我可以使用 cookie 来记住用户身份验证。我说的是对还是什么?
      猜你喜欢
      • 2015-11-04
      • 2016-11-13
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2021-10-19
      • 2015-10-05
      • 2019-12-11
      相关资源
      最近更新 更多