HTTP权威指南 基本认证机制

《HTTP 权威指南》第十二章——基本认证机制,阅读笔记。

  1. 基本认证:basic authentication
  2. 摘要认证:digest authentication(下一章的内容)

认证

HTTP的质询/响应认证框架

HTTP 提供了一个原生的 质询/响应(challenge/response)框架:Web应用收到一条 HTTP 请求报文时,服务器没有按照请求执行动作,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明他是谁,用户再次发起请求时,要附上保密证书(用户名和密码)。如果证书不匹配,服务器可以再次质询客户端,或者产生一条错误信息。

认证协议与首部

HTTP 通过一组可定制的控制首部,为不同的认证协议提供了一个可扩展框架。认证协议也在 HTTP 认证首部中指定。官方定义了两个认证协议:基本认证和摘要认证,但是我们可以按照 HTTP 质询/响应 的规范随意设计新协议。
当客户端访问需要认证信息的资源时,服务器会向客户端返回质询响应,即返回状态 [401 Unauthorized] 来拒绝请求以及使用 [WWW-Authenticate] 首部对保护区进行描述并指定认证算法。另外,服务器上会分为不同的区域,每个区域都有自己的密码。客户端在收到 [401 Unauthorized] 时,会重新发出 GET 请求,但这一次会附加一个 [Authrization] 首部,用来说明认证算法、用户名和密码。如果认证成功,服务器就会返回相应资源,而且有可能返回 [Authentication-Info] 来包含一些与授权会话相关的附加信息。
基本认证实例

安全域

安全域即上面所说的每个区域都有自己的密码,上图中服务器返回的 [WWW-Authenticate]字段的值中就有一个 realm 指令指定了当前访问文档所在的安全域,realm,这个单词的意思就是:领域,范围。

基本认证

  1. 用户名和密码会用冒号连接形成一个字符串,然后使用 Base-64 编码这个字符串,最后再将编码后的字符串放到 [Authorization] 字段的后面。
  2. 代理认证:中间的代理服务器也可以实现认证功能,但是代理服务器的认证与 Web 服务器的认证详细过程还稍有不同:
    WEB服务器与代理认证

基本认证的安全缺陷

基本认证就是在以一种明文密码的方式传输用户名和密码,所以这种认证方法根本无任何安全性可言,只能用于内网或者一些不重要的数据的保护上。