是否可以在HTTP消息中包含多个Authorization标头?具体地说,我想包括一个持有者令牌类型(传递一个OAuth访问令牌)和一个基本类型(传递一个base64编码的用户名:密码)。
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk我看不出这不是不可能的,只是想和社区一起审查一下,以确定。
发布于 2016-07-22 06:03:00
*更新2021年2月*请阅读对此回复的评论。他们的总体结论似乎是,一些web服务器接受多个授权方案,但这与RFC 7230/7235相违背*
这应该是可能的,您只需在字段值之间添加逗号,例如:
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk这在RFC7230,第3.2.2节,字段顺序中定义:
发送者不得在消息中生成具有相同字段名的多个报头字段,除非该报头字段的整个字段值被定义为逗号分隔的列表,即#(值),或者报头字段是众所周知的异常(如下所述)。
接收者可以在不改变消息语义的情况下,通过按顺序将每个后续字段值附加到由逗号分隔的组合字段值,将具有相同字段名的多个报头字段组合成一个“字段-名称:字段-值”对。因此,接收具有相同字段名的报头字段的顺序对于解释组合字段值很重要;代理在转发消息时不得更改这些字段值的顺序。
我不知道是否所有的web服务器都接受这一点--在写这篇文章的时候,我正在和一位同事讨论它是否应该工作。
发布于 2015-03-27 05:11:28
不,这不可能。请参阅http://greenbytes.de/tech/webdav/rfc7235.html#header.authorization中的语法定义
发布于 2015-09-02 18:11:11
我也有类似的问题。这似乎是一个相当常见的问题(Link to question)。我最终将持有者令牌的授权头更改为非标准的,如下所示
X认证:持有者mF_9.B5f-4.1JqM
这样,它只是另一个HTTP头,基本的http授权将通过。如果你正在开发你自己的API,这应该是没有问题的。
一些进一步的研究
基于RFC 2617,这里有一些有趣的细节。
用户代理必须选择使用具有它所理解的最强身份验证方案的挑战之一,并根据该挑战向用户请求凭据。
请注意,许多浏览器只能识别Basic,并要求它是提供的第一个身份验证方案。服务器应该只包含Basic,如果它是最低限度可接受的。
https://stackoverflow.com/questions/29282578
复制相似问题