HTTP认证机制

简介HTTP认证

如果对某个页面有一定要求,只允许部分用户可见,就需要一个认证功能。
认证主要可以通过核对以下信息实现:

  • 口令:只有本人知道的一串字符串信息
  • 令牌:仅本人设备产生的一次性密码
  • 证书:仅本人持有的一个信息

通过验证核对上述信息,就可以实现认证,对HTTP协议来说,认证主要有以下几种实现:

  • basic认证
  • digsic认证
  • ssl客户端认证
  • 基于表单的认证

下面分别论述这几种认证方式。

BASIC认证

basic认证主要利用的是http中的Authorization字段。主要步骤是:

  1. 当请求的资源需要 BASIC 认证时,服务器会随状态码 401 Authorization Required,返回带 WWW- Authenticate 首部字段的响应。该字段内包含认证的方式(BASIC) 及 Request-URI 安全域字符串 (realm)。
  2. 接收到状态码 401 的客户端为了通过 BASIC 认证,需要将用户 ID 及密码发送给服务器。发送的字 符串内容是由用户 ID 和密码构成,两者中间以冒号(:)连接后,再经过 Base64 编码处理。
    假设用户 ID 为 guest,密码是 guest,连接起来就会形成 guest:guest 这样的字符串。然后经过 Base64 编 码,最后的结果即是 Z3Vlc3Q6Z3Vlc3Q=。把这串字符串写入首部字段 Authorization 后,发送请求。
    当用户代理为浏览器时,用户仅需输入用户 ID 和密码即可,之后,浏览器会自动完成到 Base64 编码的转换 工作。
  3. 接收到包含首部字段 Authorization 请求的服务器,会对认证信息的正确性进行验证。如验证通过, 则返回一条包含 Request-URI 资源的响应。

BASIC 认证虽然采用 Base64 编码方式,但这不是加密处理。不需要任何附加信息即可对其解码。换言之, 由于明文解码后就是用户 ID 和密码,在 HTTP 等非加密通信的线路上进行 BASIC 认证的过程中,如果被人 窃听,被盗的可能性极高。
另外,除此之外想再进行一次 BASIC 认证时,一般的浏览器却无法实现认证注销操作,这也是问题之一。 BASIC 认证使用上不够便捷灵活,且达不到多数 Web 网站期望的安全性等级,因此它并不常用。

DIGEST认证(又叫摘要认证)

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

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

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

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

DIGEST 认证提供了高于 BASIC 认证的安全等级,但是和 HTTPS 的客户端认证相比仍旧很弱。DIGEST 认
证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。
DIGEST 认证和 BASIC 认证一样,使用上不那么便捷灵活,且仍达不到多数 Web 网站对高度安全等级的追 求标准。因此它的适用范围也有所受限。

SSL客户端认证

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

  1. 接收到需要认证资源的请求,服务器会发送 Certificate Request 报文,要求客户端提供客户端证
    书。
  2. 用户选择将发送的客户端证书后,客户端会把客户端证书信息以 Client Certificate 报文方式发送给 服务器。
  3. 服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始 HTTPS 加密通
    信。

基于表单认证

基于表单的认证,是利用表单控件中的数据,进行认证。比较有意思的是,基于表单的认证是http协议中未被规范的一种认证方式,但因其方便与良好的用户体验,成为了绝大多数web应用采用的认证方式。
表单认证可以借助cookie,以及加密实现一定的安全机制。

  1. 客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常是以 POST 方法把请求发送给服务
    器。而这时,会使用 HTTPS 通信来进行 HTML 表单画面的显示和用户输入数据的发送。
  2. 服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份认证,
    然后把用户的认证状态与 Session ID 绑定后记录在服务器端。
  3. 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发 送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证接收到的 Session ID 识别用户和其认证状态。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

😉😐😡😈🙂😯🙁🙄😛😳😮:mrgreen:😆💡😀👿😥😎😕