• 拿什么守护你,我的接口(接口登陆认证详解)


    简介

    Http协议是无状态的,同一个客户多次访问服务器,服务器无法识别同一个客户的关联请求,也无法保存客户的状态。要解决这个问题,服务器需要获取到客户的身份,客户需要在每次发起Http请求的时候携带相应的身份信息,服务端获取到这个身份信息以后再返回相应的资源。我们在使用Web系统时,提供用户名和密码的过程就是向客户端提供身份认证信息的过程,那么在做接口测试的时候如何模拟用户登录过程,在每一次的接口请求中携带客户的身份信息呢?

    在解决这个问题以前我们首先要了解常用的Http认证授权技术:

    基于表单的认证(Cookie & Session):基于表单的认证并不是在HTTP协议中定义的,而是服务器自己实现的认证方式,安全程度取决于实现程度。一般用Cookie来管理Session会话,是最常用的认证方式之一。它的安全程度取决于服务器的实现程度,客户端在Cookie中携带认证信息,服务器解析并返回结果。

    基于JWT(Json Web Token)的认证:App和服务端常用的认证方式,用户ID和密码传输到服务器上验证,服务器验证通过以后生成加密的JWT Token返回给客户端,客户端再发起请求时携带返回的Token进行认证。

    Http Basic认证:最早的Http认证方式,用户ID和密码以分号连接,经过Base64编码后存储到Authorization字段,发送到服务端进行认证 ;用户ID/密码以明文形式暴露在网络上,安全性较差。

    Http Digest认证:在HttpBasic的基础上,进行了一些安全性的改造,用户ID, 密码 , 服务器/客户端随机数,域,请求信息,经过MD5加密后存储到Authorization字段,发送到服务端进行认证;密码经过MD5加密,安全性比Basic略高。

    其他认证方式(Oauth认证,单点登陆,HMAC认证):通过特定的加密字段和加密流程,对客户端和服务端的信息进行加密生成认证字段,放在Authorization或者是消息体里来实现客户信息的认证

    下面针对常见的Http认证授权机制,使用Jmeter实现接口的登陆和认证。

    基于表单的认证

    基于表单的认证方式采用Cookie和Session来维持会话状态,针对这种认证方式,Jmeter提供了Cookie授权管理器来实现Cookie的自动回填和携带功能,Jmeter的Cookie管理器实现了浏览器Cookie管理的功能,可以接受服务端返回的Cookie值。

    我们可以先模拟用户手工打开浏览器,在浏览器中输入用户名和密码,登录成功以后通过Chrome的抓包工具来获取到浏览器返回的Cookie值:

    把相应的Cookie值填入到Jmeter提供的Cookie管理器中即可,Cookie管理器会对相应测试计划下的所有Http请求起作用,注意此时需要和开发同学沟通Cookie的实现机制以及相应的Session字段。

    JWT认证

    此种方式是通过Token来携带认证授权信息,当用户输入正确的用户名和密码以后,服务器会返回一个Token作为认证信息,用户需要在后续的请求里面携带这个认证信息。因此我们可以通过如下步骤来实现JWT的认证:

    调用登陆接口,在登陆接口中输入用户名密码,获取服务器的响应报文

    通过Json提取器或者是正则表达式提取器,提取服务端返回的Ticket字段

    通过信息头管理器在后续的请求头中携带此Ticket

    Http Basic认证

    HttpBasic认证是Http自带的认证方式,这种认证方式通常表现为浏览器弹出Alert窗口提示输入用户名/密码

    针对这种认证,我们可以基于Beanshell插件,通过在客户端实现协议的加密流程来模拟浏览器的操作。下图所示的代码实现了用户名,密码以:分割并进行Base64编码的过程,通过这个过程实现认证字段的生成,并把它通过变量放置到授权管理器当中。

    Http Digest认证

    Http Digest也是Http协议默认支持的认证方式,它和Http Digest类似,但是编码和加密方式更为复杂。针对Http Digest 认证,Jmeter内置了认证授权管理器,在认证授权管理器中填写相应的URL,用户名,密码,域(可选字段,可以为空)选择Mechanism为Basic_Digest,Jmeter可以实现自动编码和加密,模拟浏览器和服务器的交互过程,完成登录认证。

    其他认证方式

    除了上述四种,还有很多其他的认证方式,包括现在很流行的单点登录。但无论哪一种认证方式,Http都是无状态的,绕过登录的核心都是在Http请求中携带认证信息。这个认证信息我们可以通过和开发同学沟通签名加密的流程和字段,在客户端通过编码方式实现;也可以通过抓包工具抓取到相应的认证字段,然后通过Jmeter组件把字段添加到发起的Http请求当中。

    作  者:Testfan Kitty

    出  处:微信公众号:自动化软件测试平台

    版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

  • 相关阅读:
    object对象
    addEventListener 和 attachEvent
    BOM常用对象
    动态原型
    鼠标移动图片放大效果(兼容IE8、多图)
    伪元素:before和:after
    javascript/js 判断是否安装flash player插件,提示安装方法。
    Form表单值转换为[{name:'',value}]键值对
    [转][网站、云服务与虚拟机]弄清负载均衡的机制
    C# Lazy Initialization
  • 原文地址:https://www.cnblogs.com/testfan2019/p/11865377.html
Copyright © 2020-2023  润新知