我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务。并不是所有的信息都能够公开发布的。
服务器需要通过某种方式来了解用户身份。从而判定用户可以访问的资源和事务了。
最常见的HTTP认证形式,基本认证(basic authentication)。
12.1 认证
认证就是要给出一些身份证明。
12.1.1 HTTP的质询/响应认证框架
HTTP提供了一个原生的质询/响应(challenge/response)框架,简化了对用户的认证过程。
大概就是访问时让你输入用户名和密码。
12.1.2 认证协议与首部
HTTP通过一组可定制的控制首部,为不同的认证协议提供了一个可扩展框架。认证的4个步骤:
1.请求:客户端发送原始GET请求,没有附加认证信息
2.质询:服务器返回401拒绝请求,说明需要提供用户名和密码。
3.授权:客户端重新发送请求,附加上Authorization首部,用来说明认证算法、用户名和密码。
4.成功:如果授权证书正确,服务器就会将文档返回。
12.1.3 安全域
Web服务器会将受保护的文档组织成一个安全域(security realm)。每个安全域都可以有不同的授权用户集。
下面是一个假想的基本认证质询:
HTTP/1.0 401 Unauthorized
WWW-Authenticate: Basic realm="Corporate Financials"
上面的realm就指定了域,域的描述性字符名是“Corporate Financials”。
12.2 基本认证
应用最广泛的机制
12.2.1 基本认证实例
12.2.2 Base-64 用户名/密码编码
HTTP基本认证机制将(由冒号分隔的)用户名和密码打包在一起,并用Base-64编码方式对其进行编码。它可以扰乱用户名和密码防止被管理员看到。
12.2.3 代理认证
中间的代理服务器也可以实现认证功能。步骤与Web服务器身份验证的步骤相同。但首部和状态码都有所不同。
12.3 基本认证的安全缺陷
只能用它来防止非恶意用户无意间进行的访问,或将其与SSL这样的加密技术配合使用。
缺陷有:
(1)通过网络发送用户名和密码,且是以一种很容易解码的形式表示的。实际上,密码是以明文形式传输的,任何人都可以读取并将其捕获。可以通过SSL加密信道发送所有HTTP事务,或使用更安全的摘要认证。
(2)即使密码是以更难解码的方式加密的,第三方用户仍然可以捕获被修改过的用户名和密码,并将修改过的用户名和,密码一次一次地重放给服务器,以获得对服务器的访问权。
(3)即使将基本认证用于一些不太重要的应用程序,比如公司内部网络的访问控制或个性化内容的访问,一些不良习惯也会让让变得很危险。
(4)没有提供任何针对代理和作为中间人的中间节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,这样就严重改变了事务的本质。
(5)假冒服务器很容易骗过基本认证。这样可以骗取用户名和密码。
一般将基本认证与加加密数据传输(SSL)配合使用,可以隐藏用户名和密码。会使得基本认证更加安全。