「图解HTTP」读书笔记

「 图解HTTP 」 读书笔记 第 八 章

2018-01-03  本文已影响4人  13kmsteady

确认访问用户身份的认证

1. 何为认证

核对登录者本人的信息通常指以下这些:

HTTP/1.1 使用的认证方式如下所示:

2. BASIC 认证

BASIC 认证(基本认证)是从 HTTP/1.0 就定义的认证方式,是 Web 服务器与通信客户端之间进行的认证方式。

BASIC 认证摘要.png

BASIC 认证的认证步骤

  1. 当请求的资源需要 BASIC 认证时,服务器会随状态码 401 Authorization Required,返回带 WWW-Authenticate 首部字段的响应。该字段包含认证的方式(BASIC)及 Request-URI 安全域字符串(realm)。

  2. 接受到状态码 401 的客户端为了通过 BASIC 认证,需要将用户 ID 和密码经过 Base64 编码处理后发送给服务器。

  3. 接受到包含首部字段 Authorization 请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含 Request-URI 资源的响应。

BASIC 认证使用上不够便捷灵活,且达不到多数 Web 网站期望的安全性等级,因此并不常用。

3. DIGEST 认证

为弥补 BASIC 认证存在的弱点,从 HTTP/1.1 起就有了 DIGEST 认证。DIGEST 认证同样使用质询/响应的方式(challenge/response),但不会像 BASIC 认证那样直接发送明文密码。

质询响应方式是指,一开始一方会先发送认证要求给另一方,接着使用从另一方接受到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式。

响应质询.png

因为发送给对方只是响应摘要及由质询码产生的计算结果,所以比起 BASIC 认证,密码泄漏的可能性就降低了。

DIGEST 认证摘要.png

DIGEST 认证步骤

  1. 请求需要认证的资源时,服务器会随状态码 401 Authorization Required,返回带 WWW-Authenticate 首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数,nonce)。

    首部字段 WWW-Authenticate 内必须包含 realm 和 nonce 这两个字段的信息。客户端就是依靠向服务器回送这两个值进行认证的。

  2. 接收到 401 状态码的客户端,返回的响应中包含 DIGEST 认证必须的首部字段 Authorization 信息。

  3. 接受到包含首部字段 Authorization 请求的服务器,会确认认证信息的正确性。认证通过后则返回包含 Request-URI 资源的响应。

DEGIST 认证提供了高于 BASIC 认证的安全等级,但是和 HTTPS 的客户端认证相比仍旧很弱,所以使用范围也有所受限

4. SSL 客户端认证

SSL 客户端认证是借由 HTTPS 的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来已自登录的客户端。

4.1 SSL 客户端认证的认证步骤

为达到 SSL 客户端认证的目的,需要事先将客户端证书发送给客户端,且客户端必须安装此证书

  1. 接收到需要认证资源的请求,服务器会发送 Certificate Request 报文,要求客户端提供客户端证书。

  2. 用户选择将发送的客户端证书后,客户端会把客户端证书信息以 Client Certificate 报文方式发送给服务器。

    选择客户端证书.png
  3. 服务器验证客户端证书,验证通过后方可领取证书内客户端的公开密钥,然后开始 HTTPS 加密通信。

4.2 SSL 客户端认证采用双因素认证

在多数情况下,SSL 客户端认证不会仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证来使用。

双因素认证是指,认证过程不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。

4.3 SSL 客户端认证必要的费用

使用 SSL 客户端认证需要用到客户端证书,而客户端证书需要支付一定费用才能使用。

5. 基于表单认证

基于表单的认证方法并不是在 HTTP 协议中定义的,客户端会向服务器上的 Web 应用程序发送登录信息(Credential),按登录信息的验证结果认证。

基于表单认证示例.png
5.1 认证多半为基于表单认证

对于 Web 网站的认证功能,能够满足其安全使用级别的标准规范并不存在,所以只好使用由 Web 应用程序各自实现基于表单的认证方式。

5.2 Session 管理和 Cookie 使用

基于表单认证的标准规范尚未由定论,一般会使用 Cookie 来管理 Session。

基于表单认证本身是通过服务器端的 Web 应用,将客户端发送过来的用户 ID 和密码与之前登录过的信息做匹配来认证。

使用 Cookie 来管理 Session,来弥补 HTTP 协议中不存在的状态管理功能。

Session 管理及 Cookie 状态管理.png
  1. 客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常是以 POST 方法把请求发送给服务器。而这时,会使用 HTTS 通信来进行 HTML 表单表面的显示和用户输入数据的发送

  2. 服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份验证,然后把用户的认证状态与 Session ID 绑定后记录在服务器端。

  3. 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器可通过验证接受到的 Session ID 识别用户和其认证状态。

上一篇 下一篇

猜你喜欢

热点阅读