我对 OAuth2 和验证已分配令牌的客户端有疑问。
规范说,对于机密客户端,客户端在请求令牌等时必须进行身份验证,例如使用基本身份验证标头。这意味着我们可以验证客户端是否已注册并且可以授予访问令牌。令牌请求的标头可能如下所示:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
该规范还说,一旦分配了令牌,客户端就可以通过在 auth 标头中传递令牌来使用令牌来请求信息,如下所示:
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer mF_9.B5f-4.1JqM
这很好,但是假设我们有一个或多个客户端应用程序(我们称它们为 App1 和 App2),以及我们已分别通过 Token1 和 Token2 授予它们访问权限的服务器,我们如何确定包含承载的请求在 auth 标头中发送的令牌来自我们分配给它的客户端应用程序。
App2 不能(以某种方式)获得给予 App1 的令牌(无论是恶意还是其他方式),并通过在 auth 标头而不是它自己的令牌中传递它来使用它来访问资源吗?
我们是否应该(甚至有可能)在我们向资源发出的请求中发送两个 auth 标头,一个带有我们的不记名令牌,一个带有我们的客户端凭据,以便服务可以验证令牌来自正确的客户端?