前言
认证功能能让Web页面只被有权限的人访问。而认证机制到底是怎样一个原理呢?经过今天的学习能对这个有个大体的了解。浏览器
正文
什么是认证
计算机没法判断对方的身份,须要客户端自报家门。安全
服务端为确认客户端是否真的具备访问系统的权限,须要核对服务器
“登陆者本人才知道的信息”、“登陆者本人才会有的信息”学习
HTTP使用的认证方式
HTTP/1.1使用的认证方式以下所示。编码
BASIC认证(基本认证)加密
DIGEST认证(摘要认证)orm
SSL客户端认证blog
FormBase认证(基于表单认证)ssl
Basic认证
Web服务器与通讯客户端之间进行的认证方式。资源
Basic认证的认证步骤
- 客户端请求的资源须要BASIC认证,服务器随401状态码(须要认证),返回带WWW-Authenticate首部字段的响应。
- 接收到401状态码的客户端为了经过BASIC认证,须要将用户ID和密码发送到服务器(冒号链接,再通过Base64编码处理)。
- 接收到包含首部字段Authorization请求的服务器,会对信息的正确性进行验证。(若经过,则返回一个包含Request-URI资源的响应)
PS:Basic认证所采用的Base64编码并非加密处理。
DIGEST认证
采用和Basic认证同样的质询/响应(challenge/response)的方式。
Digest认证的认证步骤:

- 客户端请求需认证的资源时,服务器会随401状态码返回带WWW-Authenticate首部字段的响应,该字段包含质问响应方式认证所需的临时质询码(随机数,nonce)。
- 客户端接收到401状态码,返回的响应中包含DIgest认证必须得首部字段Authenticate信息。(Authenticate中包含username,realm,nonce,uri和response的字段信息,realm和nonce是从服务器接收到的响应中的字段)
- 服务器接收到包含首部字段Authorization请求的服务器,确认认证信息的正确性。经过后返回包含Request-URI资源的响应。
SSL客户端认证
借由HTTPS的客户端证书完成认证的方式。
凭借客户端证书认证,服务器可确认访问是否来自已登陆的客户端。
SSL客户端认证的步骤:
需事先将客户端证书分发给客户端,且客户端必须安装此证书。
- 服务器接收到须要认证资源的请求时,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
- 客户端将客户端证书信息以Client Certificate报文方式发送给服务器。
- 服务器验证客户端证书验证经过后才能领取证书内客户端的公开密钥,而后开始HTTPS加密通讯。
SSL客户端认证采用双因素认证
证书认证(SSL客户端证书认证客户端计算机)+表单认证(密码用来肯定是用户本人的行为)
基于表单认证
并非HTTP协议中定义的。客户端向服务器上的Web应用程序发送登陆信息(Credential),按登陆信息的验证结果认证。
认证多半为基于表单认证
BASIC和DIGEST几乎不怎么使用(便利性和安全性考虑),SSL客户端认证未普及(导入和维持费用等问题)
Session管理和Cookie应用
HTTP是无状态协议,以前已认证成功的用户状态没法经过协议层面保存下来。即没法实现状态管理,咱们使用Cookie来管理Session(会话),以弥补HTTP协议中不存在的状态管理功能。
步骤:
- 客户端把用户ID和密码等登陆信息放入报文的实体部分,一般以POST请求的方式发送给服务器。
- 服务器会发放用以识别用户的Session ID。经过验证从客户端发送过来的登陆信息进行身份认证,将用户的认证状态和Session ID绑定后记录在服务器端。
- 客户端接收到Session ID后,会将其做为Cookie保存在本地。下次向服务器发送请求时,浏览器自动发送Cookie,Session ID会随之发送到服务器。服务端经过验证接收到的Session ID识别用户和其认证状态。