HTTP身份认证

2023-05-16

文章目录

  • HTTP身份认证
    • 概述
    • BASIC认证
    • DIGEST认证
    • SSL客户端认证
    • 基于表单认证

HTTP身份认证

概述

某些Web页面只想让特定的人浏览,或者仅本人可见,未达到这个目标,必不可少的就是认证功能。

HTTP/1.1使用的认证方式:

  • BASIC认证(基本认证)
  • DIGEST认证(摘要认证)
  • SSL客户端认证
  • FormBase认证(基于表单认证)

BASIC认证

BASIC认证(基本认证)是从HTTP/1.0就定义的认证方式。

BASIC认证步骤:

在这里插入图片描述

  1. 当请求的资源需要BASIC认证时,服务器会随401状态码 Authorization Required,返回带WWW-Authenticate首部字段的响应。
  2. 客户端收到401状态码,为了通过BASIC认证,需要将用户ID和密码发送给服务器。
    • 发送的字符串内容由用户ID和密码组成,二者通过冒号:连接,再经过Base64编码处理。
  3. 服务器收到包含首部字段Authorization请求,会对认证信息的正确性进行验证,如果验证通过,则返回一条包含Request-URI资源的响应。

BASIC认证采用Base64编码方式,但不是加密处理。不需要任何附加信息即可对其解码,安全性偏低。并且BASIC认证使用上不够便捷灵活,且达不到多数Web网站期望的安全性等级,因此它并不常用。

DIGEST认证

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

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

DIGEST认证步骤:

在这里插入图片描述

  1. 客户端请求需要认证的资源时,服务器会随着401状态码 Authorization Required,返回带WWW-Authenticate首部字段的响应。
    • 该字段内包含质问响应的临时质询码(随机数 nonce)。
    • 首部字段WWW-Authenticate保护realm和nonce这2个字段的信息,客户端就是依靠向服务器回送这两个值进行认证的。
  2. 客户端收到401状态码,返回的响应中包含DIGEST认证必须的首部字段Authorization信息。
  3. 服务器收到包含首部字段Authorization请求,会确认认证信息的正确性。认证通过后则会返回包含Request-URI资源的响应。

DIGEST认证提供了高于BASIC认证的安全等级,但是和HTTPS的客户端认证相比仍旧很弱。DIGEST认证提供防止密码被窃听的保护机制,但不会防止用户伪装的保护机制。

SSL客户端认证

从使用用户ID和密码的认证方式方面来讲,只要二者的内容正确,即可认证是本人的行为。但如果用户ID和密码被盗,就很有可能被第三者冒充。利用SSL客户端认证则可以避免该情况的发生。

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

SSL客户端认证步骤:

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

基于表单认证

由于使用上的便利性及安全性问题,HTTP协议标准提供的BASIC认证和DIGEST认证几乎不怎么使用。另外,SSL客户端认证虽然具有高度的安全等级,但因为导入及维持费用等问题还尚未普及。

基于表单的认证方法并不是在HTTP协议中定义的,使用Web应用程序格子实现基于表单的认证方式,通过Cookie和Session的方式来保持用户的状态。

目前绝大多数的网站基本使用表单认证+SSL认证结合的方式,基本能保证99%的请求能建立安全链接,保证客户的信息不被窃取。但是因为表单认证没有规范和标准,质量也参差不齐,所以不是所有网站有表单认证就是安全的,但是有比没用强不少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP身份认证 的相关文章

随机推荐