在基于Java的应用程序中,我们正在通过Authoriztion
HttpHeader接收JWT令牌。据我所知,HttpHeader可以针对一个Header Key包含多个值。
所以在这里想知道Authoriztion
http标头是否还可以在同一标头中包含多个bearer
令牌值?我知道Authorization
标头可以包含多个不同类型的令牌,例如Basic,Bearer等。
但是它还可以包含多个相同类型的令牌作为值吗?
as example: (Whether it is valid or not)
"Authorization" : "Bearer XXXXXX1, Bearer XXXXX2"
任何RFC参考都将有所帮助。
TLDR;有可能,某些服务器可能正在处理它,但它不是RFC有效。
长回答:
这可能是有效的,如RFC7230, section 3.2.2,现场订单中所定义:
收件人可以通过将每个后续字段值按顺序附加到合并后的字段值的方式,将具有相同字段名的多个标题字段组合成一对“字段名:字段值”,而无需更改消息的语义用逗号隔开。因此,接收具有相同字段名称的头字段的顺序对于组合字段值的解释很重要;代理转发消息时,不得更改这些字段值的顺序。
每个“承载者XXXX”都应视为单独的字段值。
因此某些服务器可能能够处理它...
...但是“ Authorization” RFC(RFC7235, Appendix C)专门为Authorization标头添加了更多规则
授权=凭据
凭证=身份验证方案[1 * SP(token68 / [(“,” /身份验证参数)*(OWS“,” [OWS auth-param])])]]
auth-param =令牌BWS“ =” BWS(令牌/引号字符串)
因此,您似乎不应该包含多个不同类型的令牌,例如Basic,Bearer等。因为它仅接受一个身份验证方案
用于承载的RFC(RFC6750 section2.1)更加简单
b64token = 1 *(ALPHA / DIGIT /“-” /“。 /“ _” /“〜” /“ +” /“ /”)*“ =”
凭证=“承载者” 1 * SP b64token
因此它可以包含相同或不同方案的多个值,某些服务器会接受它,因为它是有效的标头,但由于Authorization标头的限制更严格,因此它不是RFC有效。