1.
客户端请求访问资源: 当用户尝试访问一个受保护的资源时,客户端(通常是浏览器)会发送一个请求到服务器。
2.
服务器响应: 如果资源需要认证,服务器会返回一个 401 未授权响应,并在响应头中包含一个 WWW-Authenticate
字段,该字段提供了进行下一步加密操作所需的数据,如域(Realm)、一个随机数(Nonce),以及其他可选参数。
3.
客户端计算摘要并发送: 客户端使用用户名、密码和从服务器接收到的数据(比如:Realm、Nonce),生成一个加密的摘要(Digest)。这个过程通常涉及到哈希函数,如 MD5。客户端再次发送请求,附带 Authorization 头,其中包含摘要以及相关的认证信息。
4.
服务器验证: 服务器接收到客户端的响应后,会用同样的方法计算摘要值,如果计算结果与客户端发送的摘要值匹配,则认证成功;否则,认证失败。
realm: 指定了受保护资源所在的域(realm),客户端通常会显示该信息,以提示用户输入正确的凭据。
nonce: 一个唯一的随机字符串,用于防止重放攻击。服务器生成 nonce 值,并在每次需要进行身份验证时 发送给客户端,客户端使用它来计算摘要。 algorithm: 指定用于计算消息摘要的算法。常见的包括 MD5、MD5-sess、SHA-256 等。
qop: 指定质询保护的类型(Quality of Protection),常见值为auth
,表示身份验证质询。
nc (nonce count): 这是一个十六进制的计数器,表示客户端使用同一 nonce
值发送请求的次数。每次发送请求时,计数器的值都会增加。这确保了每个请求都是唯一的,从而阻止重放攻击。
cnonce (client nonce): 这是由客户端生成并发送的一个随机字符串,与服务器的 nonce 一起工作,增强了认证过程的安全性。客户端 nonce 确保了客户端生成的请求具有独特性,并可能参与生成响应中的摘要。
opaque: 一个字符串,由服务器生成,并作为一个参数提供给客户端,客户端必须将其原样返回。通常用于增加安全性,防止攻击者获取敏感信息。
domain: 指定了受保护资源的范围,即可以使用此认证机制的 URI 范围。
stale: 指示服务器之前发送的 nonce 是否过期,当设置为 true 时,表示之前提供的认证信息已过期,需要客户端重新认证。