HTTP——学习笔记(7)
HTTP中的认证机制
什么是认证机制?:
服务器需要知道客户端是谁。
怎样知道客户端身份?:
核对“登录者本人才知道的信息”
密码:只有本人才会知道的字符串信息
动态令牌:仅限本人持有的设备内显示的一次性密码
数字证书:仅限本人(终端)持有的信息
生物证书:指纹和虹膜等本人的生理信息
IC卡等:仅限本人持有的信息
HTTP/1.1使用的认证方式有哪些?:
BASIC认证(基本认证)
DIGEST认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证)
此外,还有Windows统一认证(Keberos认证,NTLM认证)
BASIC认证步骤:
1.当请求的资源需要BASIC认证时,服务器会随状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含认证的方式(BASIC)及Request-URI安全域字符串
2.接受到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器。发送的字符串内容是由用户ID和密码构成,两者中间以冒号连接后,再经过Base64编码处理。当用户代理为浏览器时,用户仅需输入用户ID和密码即可,之后,浏览器会自动完成到Base64编码的转换工作
3.接收到包含首部字段Authorization请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含Request-URI资源的响应。
BASIC认证缺点:
1.虽然采用了Base64编码方式,但是并不是加密处理,信息仍有被窃听的危险
2.除此之外想再进行一次BASIC认证时,一般的浏览器却无法实现认证注销操作
BASIC不够灵活,不常用
DIGEST认证步骤:
1.请求需认证的资源时,服务器会随着状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数,nonce)和realm字段信息
2.接受到401状态码的客户端,返回的响应中包含DIGEST认证必须的首部字段信息Authorization
信息。首部字段Authorization内必须包含username,realm,nonce,uri和response的字段信息。其中,realm和nonce就是之前从服务器接受到的响应中的字段
3.接受到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应,并且这时会在首部字段Authorization-Info写入一些认证成功的相关信息
缺点:
使用上不便捷灵活,并且仍然达不到多数WEB网站对高度安全等级的追求标准。
SSL客户端认证步骤:
1.接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书(需要时先将客户端证书分发给客户端,且客户端必须安装此证书)
2.用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器
3.服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信
缺点:
需要支付高额的费用
基于表单验证:
输入已事先登录的用户ID,和密码等登录信息后,发送给WEB应用程序,基于认证结果来决定认证是否成功
步骤:
1.客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
2.服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端(在首部字段Set-Cookie内写入Session ID)
3.客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。服务器端可通过验证接收到的Session ID识别用户和其认证状态
注:密码加盐:一种服务器端保存用户密码加密方式,由服务器随机生成一个字符串,保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了用一个密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。