ChatGPT解决这个技术问题 Extra ChatGPT

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

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


A
Andy

摘要式身份验证通过将哈希函数应用于以下内容以加密形式传递凭据:用户名、密码、服务器提供的随机数值、HTTP 方法和请求的 URI。

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

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

有关所有血腥细节,请参阅 RFC-2617


基本身份验证如何不加密?我用这个网站来解码用户名和密码数据 base64decode.org
编码和加密不是一回事。您能够使用该站点解码凭据的事实表明它们未加密。
@Andy“解码凭据”是什么意思?无法解码散列凭据...
对,基本身份验证不使用散列凭据,它们是 base64 编码的。
@DotFreelancer 简单地说,加密需要使用某种方法解密的密钥,而编码只需要该方法。如果收到加密消息的人没有密钥,则无法恢复(解密)消息。
P
Premraj

HTTP 基本访问认证

STEP 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>

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

STEP 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 

sourceexample

在 Postman 中看起来如下:

https://i.stack.imgur.com/TH3DY.jpg

笔记:

Basic 和 Digest 方案专用于使用用户名和密码进行身份验证。

Bearer 方案专用于使用令牌进行身份验证。


在您的 Web 服务器上,即使您无法控制客户端,您是否也可以为所有 http 请求重定向到 https?
更多我想它更多我明白你的观点。假设他们通过 http 提交凭据并访问您的站点,您可以重定向,但如果他们遇到恶意站点,您将无能为力。
为什么使用 Digest,你不能在存储到数据库之前加密你的密码,而在取出它时,解密它?
尽管选择的答案更接近问题,但我喜欢这个答案,因为它为我们这些外行人提供了利弊。
优秀的答案,准确并解释了利弊。
B
BoRRis

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

1. Http基本认证

https://i.stack.imgur.com/moYwc.png

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

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

https://i.stack.imgur.com/llToF.png

https://i.stack.imgur.com/Givyw.png

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

2. Http 摘要认证(rfc 2069)

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

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

https://i.stack.imgur.com/ruoo0.png

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

https://i.stack.imgur.com/E04cK.png

https://i.stack.imgur.com/5k3eJ.png

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


这应该是公认的答案,因为它为图表提供了更多信息和荣誉。
废话。基本身份验证仅适用于 HTTPS。因此,真正的比较是基于 HTTPS 的基本身份验证与基于 HTTP 的摘要式身份验证。鉴于现在网站正在加密其所有流量,您不妨使用基于 HTTPS 的基本身份验证。
@Gili您对加密和身份验证感到困惑。
c
chetan chaphekar

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

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


base 64 编码不是加密的。