本章以及接下来的十三章都是介绍了http验证用户身份的一些机制!本章介绍一下基本认证,首先得这是一种简单的认证,并不能用于复杂、保密的业务逻辑环境中,它只能做到一般的保护,比如防止某个好心人查看你的个人信息!
基本认证概述
基本认证描述的就是用户第一次访问服务器的时候,服务器返回401状态码和WWW-Authenticate响应首部,并在首部中描述了密码编码算法和对应要使用密码的安全域,然后客户端弹框,在输入用户名和密码提交后。客户端发送含有Authorization首部的get请求申请验证身份,其中首部中携带了用户名和密码糅合在一起的编码后的验证码给服务器端,如果验证通过,那么服务器返回200的响应,并以Authentication-Info首部携带相关信息,以后用户就可以不用密码访问相关文件了!
认证
- 认证就是给出一种身份证明
- HTTP的质询/响应认证框架:简单来说就是客户端和服务器端之间通信需要通过不断验证身份的过程来完成一个会话。Web第一次发起一条http请求报文时,服务器返回一个“认证质询”响应,要求客户端提供用户信息,用户再次发起请求时,就会附上身份信息证书,如果验证通过,那么就完成会话,否则继续发起质询/认证!
- 认证协议与首部:http官方定义了两个官方的认证协议:基本认证和摘要认证。与此有关的报文首部如下:
- WWW-Authenticate:发生在服务器向客户端发起质询时,此时服务端返回401状态码,同时此首部定义了服务器端那个域需要验证质询认证
- Authorization:发生在客户端发起认证时,携带用户名和密码等信息!
- Authentication-Info:发生在认证成功时,服务器返回200 ok,并以此首部携带一些信息
- 安全域:安全域说明了不同的资源需要使用不同的访问权限!说白了你访问服务器不同的路径需要不同的验证方式,也就是说你可能需要重新验证!
基本认证
- 基本认证实现服务器端可以拒绝一个事务,并要求验证客户端信息,返回401状态码,发起质询/认证!
- Base-64用户名/密码编码:是一种编码机制
- 代理认证:就是代替服务器向客户端发起质询/认证,与服务器端发起的质询/认证主要有几点不同:质询的时候返回的是407状态码,服务器端质询返回的首部是Proxy-Authenticate,客户端认证时发送的是Proxy-Authorizatio首部,认证成功之后返回的是Proxy-Authentication-Info首部。
基本认证的安全缺陷
基本认证简单快捷,但并不安全,存在以下缺陷:
- 基本认证是采用网络以明文的方式发送用户名和密码,容易被别人捕获。
- 即使是密文发送 ,也很容易被别人解码
- 适用于很简单的会话服务
- 没有中间节点的保护措施
- 容易假冒服务器骗过基本认证
安全使用基本认证的唯一方式就是将其与SSL配合使用。
下一节:本章提供HTTP官方定义的另外一种认证协议:摘要认证。摘要认证跟基本认证兼容,但更安全,虽然没有得到广泛应用,但对安全事务来说,这些概念是很重要的。