何时将刷新令牌传递给API

时间:2017-01-30 15:06:42

标签: asp.net-web-api2 access-token refresh-token

我正在尝试访问授权服务器,当用户提供用户名和密码时,该授权服务器会发出短期访问令牌和更长时间的刷新令牌。

  1. 客户端是否应该在每次调用API时都使用刷新令牌以及访问令牌,或者客户端只有在从API接收到访问令牌已过期的错误代码时才会传递刷新令牌?
  2. 刷新令牌过期后,将哪种类型的错误代码传递回客户端?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌。

1 个答案:

答案 0 :(得分:4)

问题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虽然不保证这一点 如果服务器未提供新的刷新令牌,或者无法依赖新的刷新令牌,则必须要求用户再次登录。请注意,此登录是通过授权服务器完成的,授权服务器不一定是您的应用程序。事实上,它可能不是。