我正在尝试从OAuth 2规范中实现Resource Owner & Password Credentials流程。我无法理解通过有效响应发回的token_type
值。在规范中,所有的例子都显示"token_type":"example"
,但它应该是
token_type REQUIRED。如Section 7.1中所述发布的令牌类型。值不区分大小写。
有人可以向我解释一下吗?
token_type
是访问令牌生成对授权服务器的调用中的一个参数,它实质上表示如何为资源访问调用生成和呈现access_token。您在访问令牌生成调用中向授权服务器提供token_type。
如果你给Bearer
(大多数实现时默认),会生成一个access_token
并发回给你。承载可以简单地理解为“允许访问此令牌的持有者”。一个有效的令牌,没有问题。另一方面,如果您选择Mac
和sign_type
(在大多数实现中默认为hmac-sha-1
),生成访问令牌并在密钥管理器中作为属性保密,并将加密密钥作为access_token
发回
是的,您可以使用自己的token_type
实现,但这可能没有多大意义,因为开发人员需要遵循您的流程而不是OAuth的标准实现。
任何人都可以将“token_type”定义为OAuth 2.0扩展,但目前“持有者”令牌类型是最常见的。
https://tools.ietf.org/html/rfc6750
基本上这就是Facebook正在使用的。尽管如此,它们的实现有点落后于最新规范。
如果您想比Facebook更安全(或者像具有“签名”的OAuth 1.0一样安全),您可以使用“mac”令牌类型。
然而,由于mac规范仍在快速变化,因此将很难实现。
Mozilla MDN Header Information
持票人令牌 具有属性的安全令牌,即拥有该令牌的任何一方(“持票人”)可以以任何其他拥有该令牌的方式使用该令牌。使用不记名令牌不需要持票人来证明拥有加密密钥材料(占有证明)。
身份验证服务器为您创建了承载令牌或刷新令牌。当用户对您的应用程序(客户端)进行身份验证时,身份验证服务器会为您的承载令牌(刷新令牌)生成,然后您可以使用该令牌来获取访问令牌。
承载令牌通常是由认证服务器创建的某种神秘值,它不是随机的,它是根据用户授予您访问权限和您的应用程序访问的客户端创建的。