1

我对 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 标头,一个带有我们的不记名令牌,一个带有我们的客户端凭据,以便服务可以验证令牌来自正确的客户端?

4

1 回答 1

2

简短的回答:这在今天以标准化的方式是不可能的。

今天的 OAuth 2.0 规范定义了不具有您正在寻找的属性的不记名令牌,因为提供它们的客户将获得对资源的访问权,而无需证明他们是该令牌的合法所有者。令牌旨在仅通过机密 (TLS) 通道传递和使用,因此它们不会以错误的客户端结束。

OAuth 2.0 工作组正在进行工作,以定义 OAuth 2.0 的所谓“所有权证明”扩展,这将允许客户端签署请求,以便接收者可以验证它是呈现请求的正确客户端。另见:http ://www.thread-safe.com/2014/04/oauth-proof-of-possession-drafts.html

OAuth 2.0 规范的当前迭代使用 Bearer 令牌保持尽可能简单,只是为了使编写客户端实现变得非常容易。如果您同时控制客户端和资源服务器,您可能会提出您自己的所有权证明的自定义机制,但目前还没有标准的方法来做到这一点。

于 2015-04-24T14:23:02.700 回答