1
137
主要的区别是它不需要通过纯文本的方式发送用户名和密码。它还对重播攻击免疫,因为它使用来自服务器的一次性号码。 服务器给客户端一个一次性使用号码(nonce),它与用户名、领域、密码和uri请求结合在一起。客户机通过md5散列方法运行所有这些字段以生成散列键。 它将这个散列密钥连同用户名和域一起发送到服务器,以尝试进行身份验证。 服务器端使用相同的方法生成hashkey,只是服务器从用户db中查找用户的预期密码,而不是使用在浏览器中键入的密码。它为这个用户名查找存储的密码,运行相同的算法并将其与客户端发送的内容进行比较。如果它们匹配,则授予访问权限,否则它可以发送回401未授权(无登录或登录失败)或403禁止(访问被拒绝)。 摘要身份验证是 standardized in RFC2617 . 有一个 nice overview of it on Wikipedia : 你可以这样想:
|
2
10
|
3
1
获取凭据哈希ha1的唯一方法是知道密码。服务器知道ha1,但不知道生成它的密码。如果攻击者知道ha1,它可能会进入系统。所以它不会被送下线。在执行此操作之前,将执行基于nonce等的进一步哈希,并且这必须与在服务器上执行的类似计算一致。因此,只要服务器保持ha1私有,系统就是安全的。 |