代码之家  ›  专栏  ›  技术社区  ›  SoftwareGeek

什么是摘要身份验证?

  •  81
  • SoftwareGeek  · 技术社区  · 14 年前

    摘要式身份验证与基本身份验证有何不同,而不是以纯文本形式发送凭据?

    3 回复  |  直到 7 年前
        1
  •  137
  •   Addison    7 年前

    主要的区别是它不需要通过纯文本的方式发送用户名和密码。它还对重播攻击免疫,因为它使用来自服务器的一次性号码。

    服务器给客户端一个一次性使用号码(nonce),它与用户名、领域、密码和uri请求结合在一起。客户机通过md5散列方法运行所有这些字段以生成散列键。

    它将这个散列密钥连同用户名和域一起发送到服务器,以尝试进行身份验证。

    服务器端使用相同的方法生成hashkey,只是服务器从用户db中查找用户的预期密码,而不是使用在浏览器中键入的密码。它为这个用户名查找存储的密码,运行相同的算法并将其与客户端发送的内容进行比较。如果它们匹配,则授予访问权限,否则它可以发送回401未授权(无登录或登录失败)或403禁止(访问被拒绝)。

    摘要身份验证是 standardized in RFC2617 . 有一个 nice overview of it on Wikipedia :

    你可以这样想:

    1. 客户提出请求
    2. 客户端从服务器获取一个nonce和一个401身份验证请求
    3. 客户端发送回以下响应数组(用户名、领域、生成MD5密钥(nonce、用户名、领域、uri、用户给浏览器的密码))(是的,非常简单)
    4. 服务器获取用户名和领域(加上它知道客户端正在请求的uri),并查找该用户名的密码。然后它去做自己版本的generate_md5_key(nonce,username,realm,uri,password_i_have_this_user_in_my_db)
    5. 它将获得的generate_md5()输出与客户端发送的输出进行比较,前提是它们与客户端发送的正确密码匹配。如果他们不匹配的密码发送是错误的。
        2
  •  10
  •   Philip Fourie    14 年前

    凭证的散列通过网络发送。

    HA1 = MD5(username:realm:password)
    

    Wikipedia has an excellent article on this topic

        3
  •  1
  •   Chris Oakley    9 年前

    获取凭据哈希ha1的唯一方法是知道密码。服务器知道ha1,但不知道生成它的密码。如果攻击者知道ha1,它可能会进入系统。所以它不会被送下线。在执行此操作之前,将执行基于nonce等的进一步哈希,并且这必须与在服务器上执行的类似计算一致。因此,只要服务器保持ha1私有,系统就是安全的。

    推荐文章