什么是OAuth 2中的承载令牌和令牌types?

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

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

有人可以向我解释这个吗?

token_type是Access Token生成调用授权服务器中的一个参数,它基本上代表将如何生成access_token并将其呈现给资源访问调用。 您将访问令牌生成调用中的token_type提供给授权服务器。

如果您提供Bearer (大多数实现为默认),则会生成一个access_token并将其发回给您。 持票人可以简单地理解为“给予这个令牌的承载者”。 一个有效的标记,没有问题。 另一方面,如果selectMacsign_type (在大多数实现中为默认hmac-sha-1 ),则在密钥pipe理器中生成访问令牌并将其保密为属性,并将encryption的密钥作为access_token发回

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

任何人都可以将“token_type”定义为OAuth 2.0扩展,但是目前“承载”的标记types是最常见的。

https://tools.ietf.org/html/rfc6750

基本上这就是Facebook正在使用的。 尽pipe如此,他们的实施还是落后于最新规格。

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

但是,由于macros观经济仍在迅速变化,这将是艰难的。

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

Mozilla MDN头信息

无记名令牌
带有财产的安全令牌,拥有令牌的任何一方(“持有人”)可以以任何拥有该令牌的方式使用该令牌。 使用不记名令牌不需要携带者certificate拥有encryption密钥材料(拥有certificate)。

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

承载令牌通常是由authentication服务器创build的某种神秘价值,它不是随机的,它是基于用户给你的访问权限和你的应用访问的客户端创build的。