摘要和基本身份验证有什么区别?
答案 0 :(得分:164)
摘要式身份验证通过将哈希函数应用于用户名,密码,服务器提供的nonce值,HTTP方法和请求的URI来以加密形式传递凭据。
基本身份验证使用未加密的base64编码。
因此,通常只应在提供传输层安全性的地方使用基本身份验证,例如https。
有关所有血腥细节,请参阅RFC-2617。
答案 1 :(得分:87)
HTTP基本访问身份验证
基本身份验证使用 base64 编码(非加密)生成包含用户名和密码信息的加密字符串。 HTTP Basic不需要通过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摘要访问身份验证是一种更复杂的身份验证形式,其工作方式如下:
优点:
缺点:
在摘要中,HTTP Digest本质上容易受到至少两次攻击,而使用SSL加密基本密码的服务器的服务器不太可能共享这些漏洞。
如果您无法控制您的客户端,他们可能会尝试在没有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
邮递员看起来如下:
注意:强>
答案 2 :(得分:32)
让我们看一下使用Wireshark
进行两次 HTTP 身份验证之间的区别(用于分析已发送或已接收数据包的工具)。
<强> 1。 Http基本身份验证
一旦客户端按照Web服务器的要求键入正确的用户名:密码,Web服务器就会在数据库中检查凭据是否正确并提供对资源。
以下是数据包的发送和接收方式:
在第一个数据包中,客户端使用资源上的 POST 方法填充凭据 - lab/webapp/basicauth
。作为回报,服务器回复http响应代码 200 ok ,即,用户名:密码是正确的。
现在,在Authorization
标题中,它显示基本授权后跟一些随机字符串。此字符串是编码(Base64)版本的凭证admin:aadd
(包括冒号)。
2。 Http Digest身份验证(rfc 2069)
到目前为止,我们已经看到基本身份验证通过网络以明文形式发送用户名:密码。但摘要身份验证使用哈希算法发送密码的 HASH 。
以下是显示客户端发出的请求和服务器响应的数据包。
一旦客户端键入服务器请求的凭据,密码就会使用算法转换为response
,然后发送到服务器,如果服务器数据库具有与客户端给出的相同的响应服务器提供对资源的访问权限,否则会出现 401 错误。
在上面Authorization
中,使用response
,Username
,Realm
,Password
,{{1}的值计算http-method
字符串}和URI
如图所示:
因此,我们可以看到摘要式身份验证更安全,因为它涉及哈希(MD5加密),因此数据包嗅探器工具无法嗅探密码,尽管在Basic Auth中确切的密码显示在Wireshark上。
答案 3 :(得分:-2)
基本身份验证使用基础64 Encoding来生成包含用户名和密码信息的加密字符串。
摘要访问身份验证使用哈希方法生成密码结果