摘要身份验证与基本身份验证的区别在于如何以纯文本格式发送凭据?
答案 0 :(得分:139)
主要区别在于它不需要以明文形式通过线路发送用户名和密码。它也不受重放攻击的影响,因为它使用来自服务器的一次性号码。
服务器为客户端提供一次性使用号码(nonce),它与用户名,域名,密码和URI请求相结合。客户端通过MD5散列方法运行所有这些字段以生成散列密钥。
它将此哈希密钥与用户名和领域一起发送到服务器以尝试进行身份验证。
服务器端使用相同的方法生成一个hashkey,而不是使用输入到浏览器的密码,服务器从用户DB中查找用户的预期密码。它会查找此用户名的存储密码,通过相同的算法运行并将其与客户端发送的内容进行比较。如果它们匹配则授予访问权限,否则它可以发回401 Unauthorized(无登录或登录失败)或403 Forbidden(拒绝访问)。
摘要式身份验证为standardized in RFC2617。有一个nice overview of it on Wikipedia:
你可以这样想:
答案 1 :(得分:11)
答案 2 :(得分:1)
获取凭据哈希值HA1的唯一方法是知道密码。服务器知道HA1但不知道生成它的密码。如果攻击者知道HA1,它可以进入系统。所以它不是通过电线发送的。在执行此操作之前,将基于nonce等进行进一步的散列,这必须与在服务器上执行的类似计算一致。因此,只要服务器保持HA1私有,系统就是安全的。