2017-01-30 37 views
3

我试图访问授权服务器,该服务器在用户提供用户名和密码时发出短期访问令牌和更长寿命的刷新令牌。何时将刷新令牌传递给API

  1. 客户端应该在每次调用API时都传递刷新令牌以及访问令牌,还是只有当客户端从API接收到访问令牌已过期的错误代码时才传递刷新令牌?
  2. 一旦刷新令牌过期,什么类型的错误代码被传回给客户端?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌。

回答

2

问题1:

应在客户端通过刷新令牌在每次调用的API与访问一起令牌或应一旦他们收到一个错误代码,客户端只通过刷新令牌来自访问令牌已过期的API?

直到访问令牌过期,客户端才需要刷新令牌。 每次调用都需要访问令牌,但只有授予新访问令牌的请求需要刷新令牌。

要获得新的访问令牌,请发送grant_type设置为refresh_token的请求,如section 6 of the RFC中所述。
理想情况下,您需要在之前询问新的接入令牌,此时接入令牌已经过期,以免中断服务。

我见过的大多数实现发行一个新的刷新令牌,每访问令牌。您可以使用任何有效的刷新令牌来获取新的访问令牌。

问题2:

传递什么样的错误代码返回给客户端一次刷新令牌过期?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌。

不幸的是,RFC没有明确定义错误响应;请参阅RFC的第7.2节:

如果资源访问请求失败,资源服务器应该通知 错误的客户端。虽然此类错误响应的具体内容超出了本规范的范围,但本文档在第11.4节中为OAuth令牌认证方案之间共享的错误值建立了一个通用注册表。

所以,确切的响应取决于服务器。它应该由有问题的服务器来定义。

如果服务器提供新的刷新令牌,则在当前服务器到期前,您需要获取新的刷新令牌。

您不想再次发送用户的凭证;你不应该拥有它们,更不用说保留它们了。OAuth 2旨在允许第三方访问用户的受保护资源,而无需查看用户的凭据。

您通常会在password_grantrefresh_token调用中获得带有新访问令牌的新令牌。但RFC不保证这一点。
如果服务器没有提供新的刷新令牌,或者不能依赖新的刷新令牌,则必须要求用户重新登录。请注意,此登录是通过授权服务器完成的,而授权服务器不一定是您的应用程序。事实上,它可能不是。

+0

我明白了你对访问令牌过期的看法,但最终刷新令牌将过期。此时,客户端需要使用凭证重新进行身份验证。 – webworm

+0

@webworm我更新了我的答案。大多数情况下,刷新令牌的到期时间比会话长得多。在这些情况下,要求用户重新登录并不是问题。 –