摘要身份验证和基本身份验证有什么区别?


Answers:


194

摘要身份验证通过将哈希函数应用于以下各项来以加密形式传达凭据:用户名,密码,服务器提供的现时值,HTTP方法和请求的URI。

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

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

有关所有详细信息,请参阅RFC-2617


1
基本身份验证如何不加密?我使用此网站解码了用户名和密码数据base64decode.org
Dot Freelancer

65
编码和加密不是一回事。您能够使用该站点对凭据进行解码的事实表明,它们没有被加密。
安迪2012年

@Andy摘要身份验证和密码身份验证之间有区别吗?还是他们指的是同一件事?谢谢。
user224567893 2014年

1
@Andy“解码凭据”是什么意思?散乱的凭据无法解码...
Alexander Suraphel 2014年

8
是的,基本身份验证不使用哈希凭证,它们是base64编码的。
安迪

111

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>

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

  • 步骤1:客户端向服务器发送请求
  • 步骤2:服务器以特殊代码响应(称为Ñ棕土仅使用一次),表示另一个字符串境界(散列),并请求客户机认证
  • 步骤3:客户端以该随机数和用户名,密码和领域(哈希值)的加密版本进行响应
  • 步骤4:如果客户端的哈希值与用户名,密码和领域的哈希值匹配,则服务器以请求的信息作为响应,否则返回错误

优点:

  • 没有将用户名或密码以纯文本形式发送到服务器,这使得非SSL连接比未通过SSL发送的HTTP Basic请求更加安全。这意味着不需要SSL,这使每个呼叫的速度稍快

缺点:

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

综上所述,HTTP Digest本质上容易受到至少两次攻击的攻击,而使用基于SSL的HTTP Basic对密码进行强加密的服务器则不太可能共享这些漏洞。

但是,如果您无法控制客户端,则客户端可能会尝试在没有SSL的情况下执行基本身份验证,这比Digest安全得多。

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

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)

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

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

来源例子

在邮递员中看起来如下:

在此处输入图片说明

注意:

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

1
在Web服务器上,即使您无法控制客户端,您是否也不能仅将所有http请求重定向到https?
10cool 2015年

我想得更多,但是我明白您的意思。假设他们通过http提交凭据并到达您的站点,您可以重定向,但是如果他们遇到了恶意站点,您将无济于事。
10cool

3
为什么使用Digest无法在存储在数据库中之前对密码进行加密,而在提取密码时将其解密呢?
papiro

尽管选择的答案更接近问题,但我喜欢这个答案,因为它为我们初学者提供了利弊。
coder0h1t

1
@ 10cool一旦您使用http进入网站,那就太晚了...不幸的是。即使您之后立即重定向到httpS,user:pass也已经通过网络清晰发送。
朱利安

41

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

1. Http基本认证

基本的

客户端按照Web服务器的要求输入正确的username:password后,Web服务器就会在数据库中检查凭据是否正确,并提供对资源的访问权限。

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

在此处输入图片说明 客户端在第一个数据包中使用POST方法在资源-处填充凭据lab/webapp/basicauth。作为回报,服务器使用http响应代码200 ok进行回复,即username:password是正确的。

HTTP数据包的详细信息

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

2。Http摘要身份验证(RFC 2069)

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

这是显示客户端请求和服务器响应的数据包。

消化

客户端键入服务器请求的凭据后,将response使用算法将密码转换为,然后将其发送到服务器。如果服务器数据库的响应与客户端给出的响应相同,则服务器将授予对资源的访问权限否则为401错误。

详细的摘要身份验证数据包 另外,在上述Authorization中,response字符串使用的值来计算UsernameRealmPasswordhttp-methodURINonce如所示的图像中:

响应算法 (包括冒号)

因此,我们可以看到摘要式身份验证由于涉及哈希(MD5加密)而更加安全,因此,虽然在基本身份验证中在Wireshark上显示了确切的密码,但数据包嗅探器工具无法嗅探该密码。


6
这应该是公认的答案,因为它对于图表更具参考价值和荣誉。

但是在wireshark中,您仅使用http协议嗅探数据包吗?如果您使用的是https协议怎么办?
JohnRDOrazio

Wireshark并不确定是嗅探Http还是Https。是使用协议配置的Web服务器。
BoRRis

1
废话。基本身份验证仅可用于HTTPS。因此,真正的比较是HTTPS上的基本身份验证与HTTP上的摘要身份验证。鉴于当今网站正在加密其所有流量,您不妨使用基于HTTPS的基本身份验证。
吉利

-3

基本身份验证使用base 64编码来生成包含用户名和密码信息的加密字符串。

摘要访问身份验证使用哈希方法来生成加密结果


1
base 64编码不是加密的。
Thomas Sobieck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.