在www-authenticate标头中指定多种身份验证方案

时间:2019-08-27 14:36:01

标签: http authentication www-authenticate

RFC 7235指出此标头提供了两种身份验证机制:

 WWW-Authenticate: Newauth realm="apps", type=1,
                   title="Login to \"apps\"", Basic realm="simple"

我在解析此语法时遇到问题,RFC没有帮助,因为它没有描述它。如果应用程序应该尝试这样做,则我不能只是尝试用逗号分割,因为这用于分隔身份验证机制及其参数。

如果我要使用\w+ realm=这样的正则表达式来找到每种身份验证机制的开始,我的理解会正确吗?

1 个答案:

答案 0 :(得分:1)

好吧,the (ABNF) grammar 确实描述了how to parse it。不,这样的简单正则表达式无法正常工作。

字段值由逗号分隔的挑战组成。每个质询都以方案名称开头,可以选择后跟单个SP字符和参数,每个逗号和参数用逗号分隔。您不能依靠“领域”作为第一个参数。

是的,这很难解析。不幸的是,这个烂摊子是在90年代创建的,向后兼容使其很难修复。

(顺便说一句,您不能在“,”上进行拆分,因为参数的值在使用双引号引起来时确实可以包含逗号)。

PS:http://test.greenbytes.de/tech/tc/httpauth/有一个测试套件。它使用基于ABNF grammar的正则表达式。