OAuth 2.0 授权标头

Posted

技术标签:

【中文标题】OAuth 2.0 授权标头【英文标题】:OAuth 2.0 Authorization Header 【发布时间】:2012-06-19 14:22:37 【问题描述】:

我想开发一个封装 OAuth 2.0 功能的 SDK。我检查了 OAuth 1.0 和 2.0 之间的差异,我对授权标头(1.0 和 2.0),OAuth 1.0 协议参数可以使用 HTTP“授权”标头传输,但我在当前的 OAuth 2.0 草案中找不到此描述。

OAuth 2.0 是否支持授权标头?

在 OAuth 1.0 中,您的标头如下所示:

Authorization: OAuth realm="Example",
    oauth_consumer_key="0685bd9184jfhq22",
    oauth_token="ad180jjd733klru7",
    oauth_signature_method="HMAC-SHA1",
    oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
    oauth_timestamp="137131200",
    oauth_nonce="4572616e48616d6d65724c61686176",
    oauth_version="1.0"

【问题讨论】:

没有回答您的问题,但已经有许多 OpenId 和 OAuth 库,您确定要重新发明***吗? 嗨,Kane,我不是在为 OAuth 开发 SDK,我只是在我的 SDK 中需要一些 OAuth 功能,所以我不想引入第三方库。 【参考方案1】:

您仍然可以在 OAuth 2.0 中使用 Authorization 标头。在 Authorization 标头中指定了一个 Bearer 类型,用于与 OAuth 不记名令牌一起使用(这意味着客户端应用程序只需提供(“bear”)令牌)。标头的值是客户端从授权服务器收到的访问令牌。

在本规范中有记录:https://www.rfc-editor.org/rfc/rfc6750#section-2.1

例如:

   GET /resource HTTP/1.1
   Host: server.example.com
   Authorization: Bearer mF_9.B5f-4.1JqM

mF_9.B5f-4.1JqM 是您的 OAuth 访问令牌。

【讨论】:

OAuth 2.0 记录了两种访问令牌类型作为示例:Bearer 和 MAC (tools.ietf.org/html/rfc6749#section-7.1) 不幸的是,MAC 从未完全标准化(请参阅过期的规范草案:tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05)并且未在实践中使用。【参考方案2】:

对于那些正在寻找如何在标头中传递 OAuth2 授权(访问令牌)的示例(而不是使用请求或正文参数)的人,这是如何完成的:

Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42

【讨论】:

对于遇到此线程尝试使用带有 cURL 的授权标头的任何人,这里是命令:curl -H "Authorization: Bearer $ACCESS_TOKEN" URI 快速提问,因为我一直看到这样的答案,但没有澄清:如果我在代码中执行此操作(通过 HTTPRequest API),我会在我的请求中添加标头名称和相关的数据字段。在这个答案中,哪个部分是标题的名称,哪个是数据?也就是说,标题Authorization: Bearer0b...42 作为数据,还是标题Authorization:Bearer 0b...42 作为数据,还是什么?谢谢! (顺便说一句,如果重要的话,我是 Oauth2。) Authorization 是标头名称,冒号将名称与所有标头中的值分开,按照section 4.2 of RFC2616。

以上是关于OAuth 2.0 授权标头的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0 开放授权原理

OAuth 2.0 代码授权流程

OAuth 2.0实现分布式认证授权

在 HTTP 请求 c# 的授权标头中获取签名的 OAuth 请求

OAuth 2.0及微信网页授权

(转)OAuth 2.0授权协议详解和流程