151

我正在尝试实现 OAuth 2 规范中的资源所有者和密码凭据流。我无法理解通过token_type有效响应发回的值。在规范中,所有示例都显示"token_type":"example",但说应该是

token_type 必需的。如 第 7.1 节所述发行的令牌类型。值不区分大小写。

有人可以向我解释一下吗?

4

3 回答 3

168

token_type是 Access Token generate call to Authorization server 中的一个参数,它本质上表示如何为资源访问调用生成和呈现 access_token。您在对授权服务器的访问令牌生成调用中提供 token_type。

如果您选择Bearer(大多数实现中的默认设置),access_token则会生成并发送回您。Bearer 可以简单的理解为“赋予这个token的持有者访问权”。一个有效的令牌,不问任何问题。另一方面,如果您选择Macand sign_type(大多数实现中的默认设置hmac-sha-1),则生成访问令牌并作为属性在密钥管理器中作为机密保存,并且将加密的机密作为access_token.

是的,您可以使用自己的实现token_type,但这可能没有多大意义,因为开发人员需要遵循您的流程,而不是 OAuth 的标准实现。

于 2012-03-26T20:25:51.803 回答
33

任何人都可以将“token_type”定义为 OAuth 2.0 扩展,但目前“不记名”令牌类型是最常见的一种。

https://www.rfc-editor.org/rfc/rfc6750

基本上这就是 Facebook 正在使用的。不过,它们的实现与最新规范相比有些落后。

如果您想比 Facebook 更安全(或与具有“签名”的 OAuth 1.0 一样安全),您可以使用“mac”令牌类型。

然而,这将是艰难的道路,因为 mac 规范仍在迅速变化。

https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-05

于 2011-05-17T16:10:02.503 回答
18

来自RFC 6750,第 1.2 节

不记名令牌

一种安全令牌,具有任何拥有该令牌的一方(“持有者”)可以以任何其他拥有它的一方可以使用的任何方式使用该令牌的属性。使用不记名令牌不需要不记名证明拥有加密密钥材料(拥有证明)。

承载令牌或刷新令牌由身份验证服务器为您创建。当用户对您的应用程序(客户端)进行身份验证时,身份验证服务器会为您生成承载令牌(刷新令牌),然后您可以使用该令牌获取访问令牌。

承载令牌通常是由身份验证服务器创建的某种神秘值,它不是随机的,它是根据授予您访问权限的用户和您的应用程序获得访问权限的客户端创建的。

另请参阅:Mozilla MDN 标头信息

于 2017-07-18T10:23:12.210 回答