首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个HTTP Authorization标头?

多个HTTP Authorization标头?
EN

Stack Overflow用户
提问于 2015-03-26 23:31:27
回答 6查看 48.4K关注 0票数 73

是否可以在HTTP消息中包含多个Authorization标头?具体地说,我想包括一个持有者令牌类型(传递一个OAuth访问令牌)和一个基本类型(传递一个base64编码的用户名:密码)。

代码语言:javascript
复制
GET /presence/alice HTTP/1.1 
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk

我看不出这不是不可能的,只是想和社区一起审查一下,以确定。

EN

回答 6

Stack Overflow用户

发布于 2016-07-22 06:03:00

*更新2021年2月*请阅读对此回复的评论。他们的总体结论似乎是,一些web服务器接受多个授权方案,但这与RFC 7230/7235相违背*

这应该是可能的,您只需在字段值之间添加逗号,例如:

代码语言:javascript
复制
GET /presence/alice HTTP/1.1 
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk

这在RFC7230,第3.2.2节,字段顺序中定义:

发送者不得在消息中生成具有相同字段名的多个报头字段,除非该报头字段的整个字段值被定义为逗号分隔的列表,即#(值),或者报头字段是众所周知的异常(如下所述)。

接收者可以在不改变消息语义的情况下,通过按顺序将每个后续字段值附加到由逗号分隔的组合字段值,将具有相同字段名的多个报头字段组合成一个“字段-名称:字段-值”对。因此,接收具有相同字段名的报头字段的顺序对于解释组合字段值很重要;代理在转发消息时不得更改这些字段值的顺序。

我不知道是否所有的web服务器都接受这一点--在写这篇文章的时候,我正在和一位同事讨论它是否应该工作。

票数 47
EN

Stack Overflow用户

发布于 2015-03-27 05:11:28

不,这不可能。请参阅http://greenbytes.de/tech/webdav/rfc7235.html#header.authorization中的语法定义

票数 34
EN

Stack Overflow用户

发布于 2015-09-02 18:11:11

我也有类似的问题。这似乎是一个相当常见的问题(Link to question)。我最终将持有者令牌的授权头更改为非标准的,如下所示

X认证:持有者mF_9.B5f-4.1JqM

这样,它只是另一个HTTP头,基本的http授权将通过。如果你正在开发你自己的API,这应该是没有问题的。

一些进一步的研究

基于RFC 2617,这里有一些有趣的细节。

用户代理必须选择使用具有它所理解的最强身份验证方案的挑战之一,并根据该挑战向用户请求凭据。

请注意,许多浏览器只能识别Basic,并要求它是提供的第一个身份验证方案。服务器应该只包含Basic,如果它是最低限度可接受的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29282578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档