8.1 何为认证
某些 Web 页面只想让特定的人浏览,必不可少的就是认证功能。
核对的信息通常是指:密码,动态令牌,数字证书,生物认证,IC 卡等。
HTTP 使用的认证方式 :
- BASIC 认证(基本认证)
- DIGEST 认证(摘要认证)
- SSL 客户端认证
- FormBase 认证(基于表单认证)
8.2 BASIC 认证
BASIC 认证是从 HTTP/1.0 就定义的认证方式,是 Web 服务器与通信客户端之间进行的认证方式。
认证步骤:
不足之处:
- BASIC 认证虽然采用 Base64 编码方式,但这不是加密处理,不需要任何附加信息即可对其解码。
- 想再进行一次 BASIC 认证时,一般的浏览器却无法实现认证注销操作
综上:BASIC 认证使用上不够便捷灵活,安全性等级也不高,因此它并不常用。
8.3 DIGEST 认证
DIGEST 认证同样使用质询 / 响应的方式 ,但不会像 BASIC 认证那样直接发送明文密码。
认证步骤:
不足之处:
- DIGEST 认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制
- 使用上不够便捷灵活
综上:DIGEST 认证使用上不够便捷灵活,且仍达不到多数 Web 网站对高度安全等级的追求标准,因此它的适用范围也有所受限。
8.4 SSL 客户端认证
SSL 客户端认证是借由 HTTPS 的客户端证书完成认证的方式。
认证步骤:
- 接收到需要认证资源的请求后,服务器会发送 Certificate Request 报文,要求客户端提供客户端证书
- 客户端把客户端证书信息以 Client Certificate 报文方式发送给服务器
- 服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥
- 开始 HTTPS 加密通信
采用双因素认证
在多数情况下,SSL 客户端认证不会仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证来使用。
第一个认证因素的 SSL 客户端证书用来认证客户端计算机, 另一个认证因素的密码则用来确定这是用户本人的行为。
必要的费用
客户端证书需要支付一 定费用才能使用
8.5 基于表单认证
基于表单的认证方法并不是在 HTTP 协议中定义的。客户端会向服务器上的 Web 应用程序发送登录信息,按登录信息的验证结果认证。
认证多半为基于表单认证:
背景:
由于使用上的便利性及安全性问题,HTTP 协议标准提供的 BASIC 认 证和 DIGEST 认证几乎不怎么使用。另外,SSL 客户端认证虽然具有高度的安全等级,但因为导入及维持费用等问题,还尚未普及。
使用基于表单的认证:
对于 Web 网站的认证功能,能够满足其安全使用级别的标准规范并不存在,所以只好使用由 Web 应用程序各自实现基于表单的认证方式。
Session 管理及 Cookie 应用:
由于基于表单认证的标准规范尚未有定论,所以一般会使用 Cookie 来管理 Session
Session 管理及 Cookie 状态管理的具体步骤:
- 客户端把用户 ID 和密码等登录信息放入报文的实体部分, 通常是以 POST 方法把请求发送给服务器
- 服务器会发放用以识别用户的 Session ID
- 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地
- 下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器
- 服务器端通过验证接收到的 Session ID 识别用户和其认证状态