HTTP认证

HTTP为认证提供了一种原生工具;web应用程序收到一条HTTP请求报文时,服务器没有按照请求执行动作,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明他是谁

用户再次发起请求时,要附上保密证书(用户名和密码),如果证书不匹配,服务器可以再次质询客户端,或产生一条错误信息;如果证书匹配,就可以正常完成请求了

HTTP定义了两个官方的认证协议:基本认证和摘要认证

基本认证

步骤:

1.请求:GET请求,无认证信息

2.质询:首部为WWW-Authenticate,服务器用401状态拒绝了请求,说明需要用用户提供用户名和密码。web服务器会将受保护的文档组织成一个安全域,每个安全域都可以有不同的授权用户集,比如:

HTTP/1.0 401 Unauthorized
WWW-Authenticate: Basic realm="Corporate Financials"

即指定了一个Corporate Financials域,以帮助用户了解应使用哪个用户名和密码

3.授权:客户端重新发出请求,但这一次会附加一个Authorization首部,用来说明认证协议、用户名和密码

HTTP基本认证将由冒号分隔的用户名和密码打包在一起,用base64编码后发送

4.成功:首部为Authentication-Info,如果授权证书是正确的,服务器就会将文档返回

摘要认证

由于基本认证将用户名和密码以明文的方式在网络上传递,因此是不安全的;摘要认证进行了如下改进:

  • 永远不会以明文的方式在网络上发送密码
  • 可以防止恶意用户捕获并重放认证的握手过程
  • 可以有选择地防止对报文内容的篡改
  • 防范其他几种常见的攻击方式