Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/authentication/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 摘要身份验证和基本身份验证之间有什么区别?_Http_Authentication_Https_Basic Authentication_Digest Authentication_Nonce - Fatal编程技术网

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

Http 摘要身份验证和基本身份验证之间有什么区别?,http,authentication,https,basic-authentication,digest-authentication,nonce,Http,Authentication,Https,Basic Authentication,Digest Authentication,Nonce,摘要身份验证和基本身份验证之间的区别是什么?摘要身份验证通过对用户名、密码、服务器提供的nonce值、HTTP方法和请求的URI应用哈希函数,以加密形式传递凭据 而基本身份验证使用非加密的base64编码 因此,基本身份验证通常只应在提供传输层安全性(如https)的情况下使用 查看所有血淋淋的细节 HTTP基本访问身份验证 步骤1:客户端请求信息,以明文形式向服务器发送用户名和密码 步骤2:服务器响应所需信息或错误 基本身份验证使用base64编码(非加密)生成包含用户名和密码信息的加密字

摘要身份验证和基本身份验证之间的区别是什么?

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

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

因此,基本身份验证通常只应在提供传输层安全性(如https)的情况下使用


查看所有血淋淋的细节

HTTP基本访问身份验证

  • 步骤1:客户端请求信息,以明文形式向服务器发送用户名和密码
  • 步骤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>
RFC 2617摘要访问身份验证语法

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

《邮递员》中的内容如下:

注意:

  • 基本和摘要方案专用于使用用户名和密码进行身份验证
  • 承载方案专用于使用令牌进行身份验证

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

1。Http基本身份验证

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>

只要客户端按照Web服务器的请求键入正确的用户名:密码,Web服务器就会检查数据库中的凭据是否正确,并授予对资源的访问权

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

在第一个数据包中,客户端使用resource-
lab/webapp/basicauth
上的POST方法填写凭据。作为回报,服务器使用http响应代码200 ok,即用户名:密码正确

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

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

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

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

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

在上述
授权
中,
响应
字符串是使用
用户名
领域
密码
http方法
URI
Nonce
的值计算的,如图所示:

(包括冒号)


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

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


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

基本身份验证如何不加密?我用这个网站来解码用户名和密码,数据编码和加密是不一样的。您可以使用该站点解码凭据,这表明凭据未加密。@Andy“解码凭据”是什么意思?散列凭据无法解码…对,而且basic auth不使用散列凭据,它们是base64编码的。@DotFreeler简单地说,加密需要密钥才能使用特定方法解密,而编码只需要该方法。如果接收加密消息的人没有密钥,则无法恢复(解密)该消息。在web服务器上,即使您无法控制客户端,您是否可以将所有http请求重定向到https?我想得更多