F.1 摘要 WWW-Authenticate
指令
表 F-1 根据 RFC 2617 中的描述,对 WWW-Authenticate
指令进行了说明。与往常一样,最新细节请参见官方规范。
表F-1 (来自RFC 2617的)摘要 WWW-Authenticate
首部指令
指 令 | 描 述 |
---|---|
realm | 显示给用户的字符串,这样用户就可以知道该使用哪个用户名和密码了。这个字符串中至少应该包含执行认证功能的主机名字,此外可能还会说明可能拥有访问权的用户的集合。例如,registered_users@gotham.news.com |
nonce | 服务器特有的数据字符串,每次产生一个 401 响应时都应该生成一个唯一的数据字符串。建议这个字符串为 Base-64 或十六进制数据。需要特别说明的是,由于此字符串是放在首部行中作为引用字符串传送的,所以不允许使用双引号。nonce 的内容是与实现有关的。实现的质量取决于选择是否合适。比如,可以将 nonce 构造成以下内容的 Base-64 编码:
其中 time-stamp 是服务器生成的时间或其他不重复的数值,ETag 是与所请求实体有关的 HTTP ETag 首部的值,private-key 是只有服务器知道的数据。使用这种形式的 nonce,服务器会在收到客户端的 Authentication 首部之后重新对散列部分进行计算,如果与该首部的 nonce 不符,或者时间戳的值不够近,就可以拒绝请求。通过这种方式,服务器可以限制 nonce 的有效时间。包含 ETag 可以防止对资源更新版本的重放请求。(注意:在 nonce 中包含客户端的 IP 地址,看起来好像为服务器提供了限制最初获得此 nonce 的客户端重用 nonce 的能力,但这样会破坏代理集群,来自单个用户的请求通常都会经过集群中不同的代理进行传输。而且,IP 地址欺骗也不是很难。)实现可以选择不接受以前用过的 nonce,或以前用过的摘要,以防止重放攻击,或者选择为 POST 或 PUT 请求使用一次性 nonce 或摘要,为 GET 请求使用时间戳 |
domain | 一个引用的、由空格分隔的 URI 列表(如RFC 2396,“Uniform Resource Identifiers:GenericSyntax”所述),这些 URI 定义了保护空间。如果 URI 是个 abs_path,它就是相对于受访服务器的典型根 URL 的。这个列表中的绝对 URI 所指的服务器可能不是受访服务器。
客户端可以用这个列表来判定应该将同样的认证信息发送给哪个 URI 集:可以假定所有以此列表中的 URI 作为前缀的URI(在将两者都转换为绝对 URI 之后)都位于同一个保护空间内。
如果省略了这条指令,或者其值为空,客户端就应该假定保护空间中包含了响应服务器上的所有 URI。
这条指令在 Proxy-Authenticate 首部是无意义的,此时,保护空间总是包括整个代理;如果提供了这条指令,也应该将其忽略 |
opaque | 一个由服务器指定的数据串,应该由客户端不经修改地放在后继请求的 Authorization 首部中返回,这些后继请求应使用同一保护空间内的URI。建议这个字符串采用 Base-64 或十六进制的数据 |
stale | 一个标志,用来说明由于 nonce 值太过陈旧,前一条来自客户端的请求被拒绝了。如果 stale 为 TRUE(不区分大小写),客户端可能希望以新加密的响应重试请求,而不用再次提示用户输入新的用户名和密码。只有在服务器收到一条 nonce 无效,但摘要有效的请求(说明客户端知道正确的用户名 / 密码)时,才应该将 stale 设置为TRUE。如果 stale 为 FALSE,或者除 TRUE 之外的其他值,或者没有提供 stale 指令,用户名和 / 或密码就是无效的,需要获取新的值 |
algorithm | 一个字符串,说明了一对儿用来生成摘要和校验码的算法。如果没有提供这个字符串,就假定它为“MD5”。如果不识别此算法,就忽略这种质询(如果有多个算法的话,就使用另外一个)。
在这份文档中,用“KD(secret,data)”来表示用密码“secret”对数据“data”使用摘要算法得到的字符串,而对数据“data”使用校验和算法得到的字符串则表示为“H(data)”。表示法“unq(X)”表示引用字符串“X”的值(不包含左右两边的引号)。对 MD5 和 MD5-sess 算法来说:
也就是说,摘要就是将密码的 MD5 与冒号和数据连接在一起。MD5-sess 算法目的是支持使用高效的第三方认证服务器 |
qop | 这条指令是可选的,只是为了与 RFC 2069[6] 后向兼容才保留的。所有与此版本的摘要方案兼容的实现都应该使用它。 如果提供了这条指令,它就是由一个或多个标记构成的引用字符串,用来说明服务器所支持的“安全保障”值。值 auth 说明要进行认证,值 auth-int 说明要进行具有完整性保护的认证。一定要忽略那些不识别的选项 |
<extension> | 未来可以通过这条指令进行扩展。要忽略所有不认识的指令 |