可以在授权标头中支持多个承载令牌

时间:2019-12-03 07:14:19

标签: oauth-2.0 authorization jax-rs bearer-token jwt-auth

在基于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参考都将有所帮助。

1 个答案:

答案 0 :(得分:0)

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 for Bearer(RFC6750 section2.1)更加简单

  

b64token = 1 *(ALPHA / DIGIT /                          “-” /“。 /“ _” /“〜” /“ +” /“ /”)*“ =”

     

凭据=“承载者” 1 * SP b64token

因此它可以包含相同或不同方案的多个值,某些服务器会接受它,因为它是有效的标头,但由于Authorization标头的限制性更强,因此它不是RFC有效。