48.HTTP基本认证与摘要认证

来源:互联网 发布:asp源码域名绑定授权 编辑:程序博客网 时间:2024/05/11 21:36

  • 基本认证
  • 摘要认证

转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/52705855

基本认证与摘要认证用于在HTTP报文交互中,服务端确认客户端身份。

基本认证

在HTTP 1.0提出,服务器收到客户端请求,返回401 UNAUTHORIZED,同时在HTTP响应头的WWW-Authenticate域说明认证方式及认证域,比如:

这里写图片描述

如果客户端是浏览器,收到401后会弹出对话框要求输入用户名及密码:

这里写图片描述

输入的用户名和密码会按照username:password的格式拼接后用base64编码,填入请求报文头部的Authorization域,如Basic bWFyczpsb28=。如果输入的是错误的用户名和密码,服务器会反复要求输入用户名及密码,直至正确或用户点击取消按钮放弃认证。如果输入的是正确的用户名及密码,浏览器返回认证通过后的页面。
由于base64编码本身是可逆的过程,所以如果有中间人截获报文后,通过重放攻击即可获取正确授权。基本认证这种方式适合于弱认证要求的场景:

这里写图片描述

上面的base64字符串的解密过程如下:

这里写图片描述

摘要认证

在HTTP 1.1提出,服务器收到客户端请求后返回401 UNAUTHORIZED,同时在WWW-Authenticate字段说明认证方式是Digest,其他信息还有realm域信息、nonce随机字符串、opaque透传字段(客户端会原样返回)等:

这里写图片描述

浏览器收到响应后,弹出对话框要求用户输入用户名和密码。与基本认证不同在于,摘要认证不会发送原始密码,注意请求中的response字段,是通过其他字段及密码经过一系列摘要运算(md5)得到的:

这里写图片描述

服务端收到请求后,由于其知道用户的原始密码及其他字段信息,使用同样的算法进行摘要计算后,与response字段比较即可验证用户的合法性。服务器端通过更新每次交互过程中的nonoce字段的值,可以保证一定的安全性。

之所以说是一定的安全性,是因为基本认证和摘要认证都是通过用户名+密码的形式对客户端身份进行认证,认证消息都放在HTTP报文头中。因为HTTP报文本身是不加密的,所以只要中间人能够截获交互过程中的报文头,仍然可以仿冒客户端与服务端进行通信。如果要加密交互过程中的报文交互,要采用HTTPS协议。

如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

如下几篇文章是我在学习HTTP协议时总结的博文,欢迎参考:
1. HTTP缓存
2. HTTP代理与重定向
3. HTTP、HTTPS基本原理

1 0
原创粉丝点击