【发布时间】:2012-03-21 00:47:58
【问题描述】:
Digest 和 Basic 身份验证有什么区别?
【问题讨论】:
标签: http authentication https basic-authentication digest-authentication
Digest 和 Basic 身份验证有什么区别?
【问题讨论】:
标签: http authentication https basic-authentication digest-authentication
摘要式身份验证通过将哈希函数应用于以下内容,以加密形式传递凭据:用户名、密码、服务器提供的 nonce 值、HTTP 方法和请求的 URI。
而基本身份验证使用 非加密 base64 编码。
因此,基本身份验证通常只应在提供传输层安全性的情况下使用,例如 https。
有关所有血腥细节,请参阅RFC-2617。
【讨论】:
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 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
在 Postman 中看起来如下:
注意:
【讨论】:
让我们看看使用Wireshark(分析发送或接收的数据包的工具)两种HTTP身份验证的区别。
1. Http基本认证
一旦客户端按照 Web 服务器的要求输入正确的 用户名:密码,Web 服务器就会检查数据库中的凭据是否正确,并授予对资源。
以下是数据包的发送和接收方式:
在第一个数据包中,客户端使用资源 - lab/webapp/basicauth 的 POST 方法填充凭据。作为回报,服务器回复 http 响应代码 200 ok ,即用户名:密码正确。
现在,在Authorization 标头中,它显示它是Basic 授权,后跟一些随机字符串。此字符串是凭据的编码(Base64) 版本admin:aadd(包括冒号)。
2 。 Http 摘要身份验证(rfc 2069)
到目前为止,我们已经看到基本身份验证通过网络以明文形式发送 username:password。但 Digest Auth 使用哈希算法发送密码的 HASH。
这里是显示客户端发出的请求和服务器响应的数据包。
一旦客户端键入服务器请求的凭据,密码就会使用算法转换为response,然后发送到服务器,如果服务器数据库与客户端给出的响应相同,则服务器授予对资源的访问权限,否则会出现 401 错误。
在上面的 Authorization 中,response 字符串是使用 Username,Realm,Password,http-method,URI 和 Nonce 的值计算的,如图所示:
因此,我们可以看到摘要式身份验证更安全,因为它涉及哈希(MD5 加密),因此数据包嗅探器工具无法嗅探密码,尽管在基本身份验证中,Wireshark 上显示了确切的密码。
【讨论】:
Basic Authentication 使用 base 64 Encoding 生成包含用户名和密码信息的加密字符串。
摘要式访问身份验证使用散列方法生成加密结果
【讨论】: