lew*_*ada 48 authorization http oauth
是否可以在HTTP消息中包含多个授权标头?具体来说,我想包括一个承载令牌类型(传递OAuth访问令牌)和一个基本类型(传递base64编码的用户名:密码).
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
Run Code Online (Sandbox Code Playgroud)
我认为没有理由这是不可能的,只是想与社区一起审查以确定.
Sam*_*ley 38
这应该是可能的,您只需在字段值之间添加逗号,例如:
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
Run Code Online (Sandbox Code Playgroud)
这在RFC7230,第3.2.2节,字段顺序中定义:
发件人不得在邮件中生成具有相同字段名称的多个标题字段,除非该标题字段的整个字段值定义为逗号分隔列表[即#(值)]或标题字段是否为已知异常(如下所述).
收件人可以将具有相同字段名称的多个头字段组合成一个"field-name:field-value"对,而不改变消息的语义,方法是将每个后续字段值按顺序附加到组合字段值,由a分隔逗号.因此,接收具有相同字段名称的头字段的顺序对于组合字段值的解释是重要的; 代理不得在转发消息时更改这些字段值的顺序.
我不知道是否所有网络服务器都接受了这一点 - 在撰写本文时,我正在与同事讨论是否应该工作.
Jul*_*hke 20
不,这是不可能的.请参阅http://greenbytes.de/tech/webdav/rfc7235.html#header.authorization中的语法定义
Azn*_*eek 10
我有一个类似的问题.这似乎是一个非常普遍的问题(链接问题).我最终将承载令牌的授权标题更改为非标准的标题
X-Auth:承载mF_9.B5f-4.1JqM
这样它只是另一个HTTP头,基本的http授权将通过.如果您正在开发自己的API,这应该没问题.
一些进一步的研究
基于RFC 2617,这里有一些有趣的细节.
用户代理必须选择使用其理解的最强auth方案中的一个挑战,并基于该挑战从用户请求凭证.
请注意,许多浏览器只会识别Basic,并且要求它是第一个提供的身份验证方案.服务器应该只包括Basic,如果它是最低限度可接受的.