《HTTP权威指南》——认证机制

来源:互联网 发布:二进制是谁发明的 知乎 编辑:程序博客网 时间:2024/04/27 03:51

HTTP应该实现权限机制:即某些特定的内容只有特定用户才能访问;某些特定的事务只有特定的用户能够执行。此时,我们需要对用户进行认证。

认证

什么是认证

所谓认证, 就是用户给出身份证明,然后服务器加以验证。

HTTP认证模型:

HTTP提供了质询/响应认证框架用以简化认证过程。

  • 1)Web应用程序收到HTTP请求
  • 2)Web应用程序以一个“认证质询”作为响应
  • 3)用户提供身份证明
  • 4)服务器验证身份证明。

认证协议 和 首部

HTTP定义了两个官方的认证协议:基本认证摘要认证。(开发人员也可以设计自己的认证协议)
不同的认证协议其对应的首部及实现机制会有所差别。 但认证一般包括以下步骤

步骤 首部 描述 方法/状态 请求 第一条请求没有认证信息 GET 质询 WWW-Authenticate 服务器拒绝第一条请求,并说明需要用户提供用户民个密码 401 Unauthorized 授权 Authorization 客户端重新发出请求,请求中附加Authorization 用以说明认证算法、用户名、密码 GET 成功 Authorization-Info 如果授权成功,服务器会文档返回 200 OK

安全域

为了让服务器上不同的资源有不同的认证权限,HTTP设计者提出了安全域的概念,其实现机制是:在WWW-Authenticate质询中包含了一个realm指令。 Web服务器会将受保护的文档组织成一个安全域,每个安全域有自己的授权用户集。

基本认证

基本认证是目前最流行的HTTP认证协议,几乎每个主要的HTTP客户端和服务器都实现了基本认证机制。

基本认证的流程

在基本认证中,Web服务器拒绝事务,质询客户端,请客户端提供用户名和密码。服务器返回401状态码来初始化质询,并用WWW-authenticate响应首部指定要访问的安全域。 浏览器收到质询时,会打开客户端,请求用户输入这个域的用户名和密码。然后浏览器为用户名和密码添加扰码,再用Authorization请求首部回复给服务器。
+ Base-64编码: 在基本认证中,用户名和密码被打包在一起,并用Base-64编码方式对其进行编码。
+ 代理认证: 中间的代理服务器也可以实现认证功能。 代理认证步骤域Web服务器身份认证步骤相同,但首部和状态码有一些区别。

基本认证的缺陷

基本认证很容易导致用户名和密码泄露。
在基本认证中,用户名和密码在网络中传输,尽管进行了(如Base-64编码方式)加密,这些密文也很容易被破解。就算没有被破解,恶意用户也可以直接使用密文的密码通过服务器的认证。
另外,一些恶意的用户也可以伪装成服务器骗取用户的用户名和密码。

摘要认证

尽管基本认证便捷灵活,但存在极大的安全性问题。针对认证的安全性,摘要认证做了一些改进,很大程度上避免了安全性问题。
以下是摘要认证做的一些改进错误:

  • 永远不会以明文方式在网络上发送密码。(Base-64加密几乎相当于明文)
  • 可以防止恶意用户捕获并重放认证的握手过程。
  • 可以有选择低防止对报文内容的篡改。
  • 防范一些其他的常见的攻击方式。

摘要认证涉及到的内容较多,且比较复杂,这里不太篇幅地介绍了。等到要使用时查阅一些相关的内容就可以了。

0 0
原创粉丝点击