ChatGPT解决这个技术问题 Extra ChatGPT

OAuth 2 中的不记名令牌和 token_type 是什么?

我正在尝试实施 OAuth 2 规范中的 Resource Owner & Password Credentials 流程。我无法理解通过有效响应返回的 token_type 值。在规范中,所有示例都显示 "token_type":"example" 但说应该是

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

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


P
Pang

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

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

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


我发现“允许访问此令牌的持有者”更容易理解。这相当于开出一张支票“给支票的持票人”。
@NVM 感谢您的建议,这当然是有道理的。我也更新了。
C
Community

任何人都可以将“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


C
Community

RFC 6750, Section 1.2

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

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

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

另请参阅:Mozilla MDN Header Information