WWW-Authenticate的多个方案的分隔符是什么?

时间:2012-04-20 03:47:22

标签: http-authentication

我已阅读RFC 2617,如果支持多种方案,则无法在那里或其他任何地方找到分隔符。例如,假设支持Basic和Digest。我知道它可能会这样:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
WWW-Authenticate: Digest

但我也读到两者都可以列为一行,但是没有人展示过一个例子或描述要使用的分隔符。我已经看到警告说逗号可以在单个方案中使用

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"

我还读过如果在方案中使用逗号,则其他方案必须放在不同的行上。所以我想在上面的例子中,如果我们添加Basic,它会显示如下:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
WWW-Authenticate: Basic

这很简单。但现在假设你只有一行

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Scheme stuff, morestuff, more stuff

那是什么?这是一个以逗号分隔的方案列表,还是一个方案,只有几个参数?

1 个答案:

答案 0 :(得分:26)

就我所知,the spec就这个问题发了言。第1.2节规定:

  

注意:用户代理需要特别注意解析WWW-   如果头字段值包含
,则进行身份验证或代理验证   不止一个挑战
,或者如果有多个WWW-Authenticate标题
  提供字段,因为挑战的内容本身可以是   包含以逗号分隔的身份验证参数列表。

我认为我们可以将特别护理翻译成祝你好运。

<强>务实
实际上,我怀疑多个方案意味着应该使用多个wwww-authenticate标头。方案是可扩展的;例如,如果我想变得阴险,我可以想出一个叫做“草莓”或“不透明”的计划。鉴于此,如果没有某种“方案终止”分隔符,就没有一种解析单行的好方法。

W3C讨论
你不是第一个有这个问题的人。 W3C邮件列表上有was a discussion。海报说:

  

我没有质疑是否需要提供多项挑战   单一回应。我只是质疑允许的智慧   鉴于奇数,单个标题字段中存在多个挑战   它创造的分隔符的组合。

其他一些讨论当前问题的线索&amp;未来可能感兴趣的行动:

如果只是......
并不是说我有胃,但是人们可以挖掘出色素,火狐和火星。 webkit代码,以了解这些社区如何处理该问题。