Bearer Tokens和OAuth 2中的token_type是什么?

157
我正在尝试实现OAuth 2规范中的资源所有者和密码凭证流程。我在理解有效响应中发送的token_type值时遇到了困难。在规范中,所有示例都显示"token_type":"example",但规范中说它应该是:

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

请问有人可以向我解释一下吗?
3个回答

173

token_type 是Access Token生成调用授权服务器时的一个参数,它实质上代表了如何生成和呈现用于资源访问调用的access_token。

您需要在Access Token生成调用中向授权服务器提供token_type。

如果您选择默认(大多数实现中的)Bearer,则会生成并发送一个access_token。Bearer 可以简单地理解为“授予此token的持有者访问权限”。一个有效的token且无需验证。另一方面,如果您选择Macsign_type(大多数实现的默认值为hmac-sha-1),则将生成Access Token并作为密钥管理器中的属性保留为机密,并发送加密后的密文作为access_token

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


36
我认为“授予持有者访问权限”更容易理解。这相当于发放支票的方式:“将钱给予支票持有人”。 - NVM
@NVM 感谢您的建议,这确实很有道理。我已经进行了更新。 - Abhishek Tyagi

34

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

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


18

来自RFC 6750第1.2节

Bearer Token(持有令牌)

一种安全令牌,拥有该令牌的任何一方(“持有人”)都可以以任何其他持有该令牌的方式使用它。使用持有令牌不需要证明持有密钥材料的所有权(所有权证明)。

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

持有令牌通常是身份验证服务器创建的某种加密值,它不是随机的,而是基于允许您访问的用户和您的应用程序客户端获得的访问权限创建的。

另请参见:Mozilla MDN头信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接