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就会发到服务器