什么是摘要authentication?

摘要式身份validation与基本身份validation有什么不同,除了以纯文本forms发送凭据?

主要区别在于它不需要以纯文本forms通过线路发送用户名和密码。 对于重放攻击也是免疫的,因为它使用来自服务器的一次性号码。

服务器给客户端一次性使用数字(一个随机数),它与用户名,领域,密码和URI请求相结合。 客户端通过MD5哈希方法运行所有这些字段以生成哈希键。

它将这个散列键连同用户名和领域一起发送到服务器以尝试authentication。

服务器端使用相同的方法生成hashkey,而不是使用input到浏览器的密码,服务器从用户数据库中查找用户的期望密码。 它查找该用户名的存储密码,通过相同的algorithm运行并将其与客户端发送的内容进行比较。 如果它们匹配,则授予访问权限,否则它可以发回401 Unauthorized(未login或login失败)或403 Forbidden(拒绝访问)。

摘要式authentication在RFC2617中被标准化 。 在维基百科有一个很好的概述 :

你可以这样想:

  1. 客户提出请求
  2. 客户端从服务器获取一个随机数和一个401authentication请求
  3. 客户端发回以下响应数组(用户名,realm,generate_md5_key(nonce,username,realm,URI,password_given_by_user_to_browser))(是的,这非常简单)
  4. 服务器需要用户名和领域(加上它知道客户端请求的URI),并查找该用户名的密码。 然后它自动执行generate_md5_key(nonce,username,realm,URI,password_I_have_for_this_user_in_my_db)
  5. 它将generate_md5()的输出与客户端发送的输出进行比较,如果它们匹配客户端发送正确的密码。 如果他们不匹配,发送的密码是错误的。

通过电报发送凭证的散列。

HA1 = MD5(username:realm:password) 

维基百科有关这个话题的优秀文章

获取证书哈希值HA1的唯一方法是知道密码。 服务器知道HA1但不知道生成它的密码。 如果攻击者知道HA1可以进入系统。 所以它不是发送电线。 在做这件事之前,先进行基于随机数的进一步散列,并且这必须与在服务器上完成的类似计算一致。 因此,只要服务器保持HA1私密,系统就是安全的。