接口测试六(基本认证)

转自:http://www.360doc.com/content/16/0128/15/30056680_531241482.shtml

HTTP协议是无状态的,就像两个盲人一样,彼此不能识别对方。
同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端
服务器需要通过某种方式了解访问用户的身份。一旦服务器知道了用户身份,就可以判断用户可以访问的事务和资源了。认证意味着要证明客户端访问用户是谁。通常情况是通过提供用户名和密码来认证的

一、什么是HTTP基本认证?
客户端通过HTTP协议跟Web服务器交互, 客户端一般不会使用cookie, 而是把 '用户名+冒号+密码’用BASE64编码的字符串放在http request 中的header Authorization中发送给服务端, 这种方式叫HTTP基本认证(Basic Authentication)

当浏览器访问使用基本认证的网站(如我们要下载论坛里面的某个附件http://120.25.145.237/upload/forum.php?mod=viewthread&tid=15)的时候, 浏览器会提示你登陆(输入用户名和密码),如下图

当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码,如下图
在这里插入图片描述

假如用户名密码错误的话, 服务器会返回401 如下图
在这里插入图片描述
二,认证原理:
在这里插入图片描述
三、HTTP基本认证的过程
第一步: 客户端发送http request 给服务器,

第二步: 因为request中没有包含Authorization header, 服务器会返回一个401 Unauthozied 给客户端,并且在Response 的 header ‘WWW-Authenticate’ 中添加信息。
在这里插入图片描述

第三步:客户端把用户名和密码用BASE64编码后,放在Authorization header中发送给服务器, 认证成功。

第四步:服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端

在这里插入图片描述
使用Fiddler Inspectors 下的Auth 选项卡,可以很方便的看到用户名和密码:
在这里插入图片描述
在这里插入图片描述
四、HTTP基本认证和HTTPS
把 ‘用户名+冒号+密码’ 用BASE64编码后的string虽然用肉眼看不出来, 但用程序很容易解密,上图可以看到Fiddler就直接给解密了。 所以这样的http request 在网络上,如果用HTTP传输是很不安全的。 一般都是会用HTTPS传输, HTTPS是加密的, 所以比较安全.

五、HTTP OAuth认证
OAuth 对于Http来说,就是放在Authorization header中的不是用户名密码, 而是一个token.

微软的Skydrive 就是使用这样的方式, 如下图
在这里插入图片描述

六、其他认证
除了基本认证(Basic Authentication), 还有摘要认证 digest authentication, WSSE(WS-Security)认证

七、基本认证的安全缺陷
基本认证通过网络发送用户名和密码,虽然进行base-64编码可以隐藏用户名和密码,但是很容易通过反向编码过程进行解码。

即使密码以更加难以解码的方式加密,第三方用户仍然可以捕获被修改过的用户名和密码,并通过重放攻击获取服务器的访问权限。

很多用户会将不同的服务使用相同的用户名和密码,基本认证直接发送用户名和密码,会对一些重要的服务(比如在线银行网站)造成威胁。

基本认证没有提供任何针对代理和中间人节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,这样就严重的改变了事务的本质。

假冒服务器很容易骗过基本认证。如果在用户实际链接到一台恶意服务器或者网关的时候,能够让用户相信他链接的是一个受基本认证保护的合法主机,攻击者就可以请求用户输入密码。

IIS中站点默认开启匿名身份验证,并可以直接访问

猜你喜欢

转载自blog.csdn.net/weixin_43639443/article/details/89456529