在 www-authenticate header 中指定多个身份验证方案

Specifying multiple authentication schemes in an www-authenticate header

RFC 7235 声明此 header 提供两种身份验证机制:

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

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

如果我使用像 \w+ realm= 这样的正则表达式找到每个身份验证机制的开始,我的理解是否正确?

嗯,the (ABNF) grammar does describe how to parse it。不,像这样的简单正则表达式将无法正常工作。

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

是的,这很难解析。不幸的是,这个烂摊子是在 90 年代造成的,向后兼容使得它很难修复。

(顺便说一句:您不能在“,”上拆分,因为参数的值在双引号中确实可以包含逗号)。

PS:在 http://test.greenbytes.de/tech/tc/httpauth/. It uses regexps based on the ABNF grammar 有一个测试套件。