0%

HTTP认证

HTTP认证

在进行http访问时,需要确定使用者的身份,常用的认证方式有

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

BASIC认证

BASIC认证是最基础的认证,可能会被窃取,安全性并不高

过程

  • 当请求的资源需要BASIC认证时,服务器会返回401,且带有WWW-Authenticate首部的响应,该字段包含了认证的方式BASIC和Request-URI安全域字符串(realm)

    示例

    1
    Basic realm="security" charset="UTF-8"
  • 客户端要通过认证的话,需要将用户名和密码使用冒号:拼接,然后经过Base64编码处理,将生成的字符串写入到首部Authorization中

    示例

    1
    Basic ZWxhc3RpYqd6cmVuZHl3b3==

DISEST认证

DISEST认证就比BASIC认证更保险一些

过程

  • 请求的资源需要认证时,服务器会返回401,且带有WWW-Authenticate首部的响应,该字段中包含了响应方式认证所需要的临时质询码nonce

    必须要包含有realm和nonce信息

    示例

    1
    WWW-Authenticate: Digest realm="no auth",nonce="rULh6M3A6O2N8jjzxr6vJg==",qop="auth"
  • 客户端要通过认证的话,首部Authorization中需要包含username、realm、nonce、uri和response的字段信息,其中realm和nonce是之前从服务器中接收到的,username是realm限定范围内可进行认证的用户名,uri是地址,response存放经过MD5加密后的密码字符串

SSL客户端认证

SSL客户端认证时借由HTTPS的客户端证书来完成认证的,通过客户端证书认证,服务器可确认访问是否自己登陆的客户端

过程

  • 客户端必须安装证书
  • 接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书
  • 客户端会把客户端证书信息以Client Certificate报文方式发送给服务器
  • 服务器验证证书通过后可领取证书内客户端的公开密钥,然后开始HTTPS加密通信

FormBase认证

基于表单的认证一般使用cookie来管理session,将客户端发送过来的用户id和密码与之前登录过的信息做匹配来进行认证

过程

  • 客户端把用户ID和密码等登录信息放入报文的实体部分发送给服务器
  • 服务器会发放用以识别用户的sessionID,把用户状态和sessionID绑定后记录在服务器,向客户端返回响应时,会在首部字段Set-Cookie内写入SessionID
  • 客户端接收到从服务器发来的SessionID后,会把cookie保存到本地,下次向服务器发送请求时,浏览器会自动发送cookie,所以sessionID就会发到服务器

欢迎关注我的其它发布渠道