摘要认证和基本认证的区别是什么?
摘要身份验证通过对以下内容应用哈希函数以加密形式传递凭证:用户名、密码、服务器提供的nonce值、HTTP方法和请求的URI。
而基本认证使用非加密的base64编码。
因此,基本身份验证通常只用于提供传输层安全性的地方,例如https。
详见RFC-2617。
HTTP基本接入认证
第一步:客户端发出信息请求,以明文形式向服务器发送用户名和密码 步骤2:服务器响应所需的信息或错误
基本身份验证使用base64编码(而不是加密)来生成包含用户名和密码信息的密码字符串。HTTP Basic不需要通过SSL实现,但如果不这样做,它就一点也不安全。所以我甚至不会考虑使用它。
优点:
它的实现很简单,所以你的客户端开发人员要做的工作更少,交付的时间也更短,所以开发人员更有可能想要使用你的API
与Digest不同,您可以在服务器上以您喜欢的任何加密方法(如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文摘访问认证 摘要访问认证使用哈希(i。E文摘是指切成小块)的方法来生成加密结果。HTTP文摘访问身份验证是一种更复杂的身份验证形式,其工作原理如下:
STEP 1 : a client sends a request to a server STEP 2 : the server responds with a special code (called a nonce i.e. number used only once), another string representing the realm (not a particular page, it could be a group of pages i.e. a partitioned protection space) and asks the client to authenticate STEP 3 : the client responds with this nonce and an encrypted version of the username, password and realm (a hash) STEP 4 : the server responds with the requested information if the client hash matches their own hash of the username, password and realm, or an error if not
优点:
没有用户名或密码以明文形式发送到服务器,这使得非SSL连接比不通过SSL发送的HTTP基本请求更安全。这意味着不需要SSL,这使得每个调用稍微快一些
缺点:
对于需要的每个调用,客户端都必须执行2,这使得该过程比HTTP Basic稍微慢一些 HTTP Digest很容易受到中间人安全攻击,这基本上意味着它可能会被黑客攻击 HTTP Digest阻止使用强密码加密,这意味着存储在服务器上的密码可能被黑客攻击
总之,HTTP文摘本身就容易受到至少两种攻击,而通过SSL对HTTP Basic密码使用强加密的服务器则不太可能共享这些漏洞。
如果你不能控制你的客户端,他们可以尝试在没有SSL的情况下执行基本身份验证,这比文摘要安全得多。
rfc2069摘要访问认证语法
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
源代码和示例
在《邮差》中如下所示:
注意:
Basic和Digest方案专门用于使用用户名和秘密进行身份验证。 承载方案专用于使用令牌进行身份验证。在BA(基本身份验证)中,头承载令牌可以被认为是给予该令牌的承载者访问权。
让我们来看看使用Wireshark(分析发送或接收数据包的工具)的两种HTTP身份验证之间的区别。
1. Http基本认证
一旦客户端按照web服务器的请求输入正确的用户名:密码,web服务器就会在数据库中检查凭证是否正确,并授予对资源的访问权。
以下是数据包的发送和接收方式:
在第一个数据包中,客户端使用POST方法在资源- lab/webapp/basicauth处填充凭据。在返回时,服务器返回http响应代码200 ok,i。E,用户名:密码正确。
现在,在授权头中,它显示它是基本授权,后面跟着一些随机字符串。这个字符串是凭证admin:aadd(包括冒号)的编码(Base64)版本。
2。Http摘要认证(rfc2069)
到目前为止,我们已经看到基本认证通过网络以明文形式发送用户名:密码,但是摘要认证使用哈希算法发送密码的哈希值。
下面这些包显示了客户端发出的请求和服务器的响应。
一旦客户端输入服务器请求的凭据,密码将使用算法转换为响应,然后发送到服务器。如果服务器数据库具有与客户端提供的响应相同的响应,服务器将提供对资源的访问,否则将出现401错误。
在上面的Authorization中,响应字符串是用Username、Realm、Password、http-method、URI和Nonce的值计算出来的,如图所示:
(包括冒号)
因此,我们可以看到摘要身份验证更安全,因为它涉及哈希(MD5加密),所以包嗅探工具不能嗅出密码,尽管在基本身份验证中准确的密码显示在Wireshark上。
推荐文章
- 什么是“升级-不安全-请求”HTTP报头?
- HTTP 301和308状态码有什么区别?
- 什么HTTP状态码应该用于错误的输入
- 编排microservices
- “刷新令牌”的目的是什么?
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 我可以把我所有的http://链接都改成//吗?
- URL为AJAX请求编码一个jQuery字符串
- 编译System.Net.HttpClient的查询字符串
- 如何使用网络强制HTTPS。配置文件
- 摘要认证和基本认证的区别是什么?
- 浏览器会通过https缓存内容吗
- Axios -删除请求与请求体和头?
- 如何在http获取请求设置报头?