And*_*ndy 177

摘要式身份验证通过将哈希函数应用于用户名,密码,服务器提供的nonce值,HTTP方法和请求的URI来以加密形式传递凭据.

而基本身份验证使用未加密的base64编码.

因此,通常只应在提供传输层安全性的地方使用基本身份验证,例如https.

有关所有血腥细节,请参阅RFC-2617.

  • 编码和加密不是一回事.您能够使用该站点解码凭据这一事实表明它们未加密. (58认同)
  • 是的,基本身份验证不使用散列凭据,它们是base64编码的. (7认同)
  • @Andy“解码凭据”是什么意思?无法解码散列凭据... (2认同)

Pre*_*raj 100

HTTP基本访问身份验证

  • 步骤1:客户端发出信息请求,以明文形式向服务器发送用户名和密码
  • 第2步:服务器以所需信息或错误响应

基本身份验证使用base64编码(非加密)生成包含用户名和密码信息的加密字符串.HTTP Basic不需要通过SSL实现,但如果不这样做,则根本不安全.所以我甚至不会接受没有使用它的想法.

优点:

  • 它易于实现,因此您的客户端开发人员可以减少工作量并减少交付时间,因此开发人员可能更愿意使用您的API
  • 与摘要不同,您可以使用您喜欢的任何加密方法将密码存储在服务器上,例如bcrypt,使密码更安全
  • 只需要一次调用服务器来获取信息,使客户端比更复杂的身份验证方法稍快一些

缺点:

  • SSL的运行速度比基本HTTP慢,因此会导致客户端稍慢
  • 如果您无法控制客户端,并且无法强制服务器使用SSL,则开发人员可能不会使用SSL,从而导致安全风险

总结 - 如果您可以控制客户端,或者可以确保它们使用SSL,则HTTP Basic是一个不错的选择.SSL的缓慢可以通过仅发出一个请求的速度来消除

基本认证的语法

Value = username:password
Encoded Value =  base64(Value)
Authorization Value = Basic <Encoded Value> 
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>
Run Code Online (Sandbox Code Playgroud)

HTTP摘要访问认证
摘要访问认证使用散列(即,摘要意味着切成小块)方法来生成加密结果.HTTP摘要访问身份验证是一种更复杂的身份验证形式,其工作方式如下:

  • 步骤1:客户端向服务器发送请求
  • 第2步:服务器与一个特殊的代码(称为响应ň只用红棕色一次),代表着另一个字符串境界(散),并要求客户端进行身份验证
  • 第3步:客户端使用此nonce以及用户名,密码和域的加密版本(哈希)进行响应
  • 步骤4:如果客户端哈希与他们自己的用户名,密码和域的哈希匹配,则服务器使用所请求的信息进行响应,否则返回错误

优点:

  • 没有用户名或密码以明文形式发送到服务器,使得非SSL连接比不通过SSL发送的HTTP Basic请求更安全.这意味着不需要SSL,这使得每个调用稍微快一些

缺点:

  • 对于每个需要的调用,客户端必须使2,使进程比HTTP Basic稍慢
  • HTTP Digest容易受到中间人安全攻击,这基本上意味着它可能被黑客攻击
  • HTTP摘要阻止使用强密码加密,这意味着存储在服务器上的密码可能被黑客入侵

在摘要中,HTTP Digest本质上容易受到至少两次攻击,而使用SSL加密基本密码的服务器的服务器不太可能共享这些漏洞.

如果您无法控制客户端,则可以尝试在不使用SSL的情况下执行基本身份验证,这比Digest安全性低得多.

RFC 2069摘要访问身份验证语法

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)
Run Code Online (Sandbox Code Playgroud)

RFC 2617摘要访问身份验证语法

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added 
Run Code Online (Sandbox Code Playgroud)

来源例子

邮递员看起来如下:

在此输入图像描述

注意:

  • 基本和摘要方案是专为使用一个用户名和秘密认证.
  • 承载方案是专门为使用令牌的认证.

  • 为什么,使用Digest,您可以在存储到数据库之前加密密码,并在拔出密码时解密它? (3认同)

BoR*_*Ris 38

让我们看一下两个HTTP身份验证之间的区别Wireshark(使用工具分析发送或接收的数据包).

1. Http基本身份验证

基本

一旦客户端输入正确的用户名:密码,按照Web服务器的要求,Web服务器就会在数据库中检查凭据是否正确并提供对资源的访问权限.

以下是数据包的发送和接收方式:

在此输入图像描述 在第一个数据包中,客户端使用资源上的POST方法填充凭证- lab/webapp/basicauth.返回时,服务器回复http响应代码200 ok,即用户名:密码是正确的.

HTTP数据包的细节

现在,在Authorization标题中显示它是基本授权,后跟一些随机字符串.此字符串是凭证(包括冒号)的编码(Base64)版本admin:aadd.

2.Http摘要认证(rfc 2069)

到目前为止,我们已经看到基本身份验证通过网络以明文方式发送用户名:密码.但是摘要身份验证使用哈希算法发送密码的HASH.

以下是显示客户端发出的请求和服务器响应的数据包.

消化

一旦客户端键入服务器请求的凭据,密码就会转换为response使用算法的a 然后发送到服务器.如果服务器数据库具有与客户端给出的响应相同的响应,则服务器可以访问资源,否则401错误.

详细摘要auth数据包 另外,在上述Authorization中,response字符串使用的值来计算Username,Realm,Password,http-method,URINonce作为图像中所示:

响应算法 (包括冒号)

因此,我们可以看到摘要式身份验证更安全,因为它涉及哈希(MD5加密),因此数据包嗅探器工具无法嗅探密码,尽管在Basic Auth中确切的密码显示在Wireshark上.

  • 这应该是公认的答案,因为它对图表更有信息和赞誉. (6认同)
  • 废话。基本身份验证只能通过 HTTPS 使用。因此,真正的比较是基于 HTTPS 的基本身份验证与基于 HTTP 的摘要身份验证。鉴于现在网站正在加密其所有流量,您不妨使用 HTTPS 上的基本身份验证。 (2认同)