何时将刷新令牌传递给API

web*_*orm 5 access-token asp.net-web-api2 refresh-token

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

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

S.L*_*ica 5

问题 1:

客户端应该在每次调用 API 时将刷新令牌与访问令牌一起传递,还是应该仅在从 API 收到访问令牌已过期的错误代码时才传递刷新令牌?

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

要获取新的访问令牌,请发送一个grant_type设置为的请求refresh_token,如RFC 的第 6 节所示
理想情况下,您应该在当前访问令牌过期之前请求一个新的访问令牌,以免中断服务。

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

问题2:

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

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

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

因此,确切的响应取决于服务器。它应该由相关服务器定义。

如果服务器提供新的刷新令牌,您需要在当前的刷新令牌到期之前获得一个新的刷新令牌。

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

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