拿什么守护你,我的接口(接口登陆认证详解)
itomcoil 2025-09-01 04:12 7 浏览
简介
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
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
相关推荐
- Filter函数在WPS里的正确用法,官方教程里都没有说......
-
Filter函数是office365新增的筛选函数,WPS也紧跟添加了它。但在二个软件中的使用方法却完全不同。office365有单元格溢出功能,只需要输入一个Filter公式即可完成数据筛选。但在W...
- 跳过VLOOKUP天坑!FILTER函数10个招式让同事以为你开了外挂?
-
还在为VLOOKUP的"一对多"限制头疼?是否还在为INDEX+MATCH的嵌套抓狂?今天教你用Excel新晋顶流——FILTER函数,10个高能用法让你秒变数据操控大师!用法1:精准...
- Filter函数的三种用法,比用VLOOKUP一对多查询,更加灵活方便
-
文章最后有彩蛋!好礼相送!Excel秘籍大全,正文开始FILTER函数可以基于定义的条件筛选一系列数据。在没有filter函数之前,如果实现一对多查询,常见的是构建辅助列,然后使用VLOOKUP+R...
- Filter函数公式,快速实现订单核对,1分钟学会
-
举个例子,我们有一份公司所有的订单源数据表格,这里我们只用两列信息来模拟,实际可能有很多列数据,几百行数据然后我们有另外一个表,里面有部分已经处理过的订单数据,如下所示,这里举例是4个,实际可能有上百...
- FILTER函数结合及经典用法2:一对多筛选
-
FILTER经典用法2:一对多筛选。FILTER函数的经典用法2:一对多的筛选。比如左边这个表格,需要根据部门筛选出每个部门的人员,应该怎样做?·把鼠标放在单元格内,在编辑栏输入等于FILTER。·第...
- 干掉VLOOKUP,FILTER函数9大用法全解析!
-
1.单条件基础筛选场景:筛选销量>5000的记录公式:=VSTACK(A1:D1,FILTER(A2:D9,D2:D9>5500))解析:A2:D9为需要筛选的数据区域,D2:D9&...
- Excel新函数公式Filter,秒杀VLOOKUP,人人必学
-
以前VLOOKUP公式是必学的公式,自从新版本更新之后,VLOOKUP已经变得可有可无了,但是新出来的Filter函数公式,你必须学会,它非常的强大,工作中用到非常频繁1、Filter公式背景在学会这...
- 第一讲:filter的基本用法及拓展_filter详解
-
全能查找函数filter的基本用法及拓展初学者,务必观看。进阶者,可互相学习,欢迎在回复中补充新用法。首次撰写此函数相关内容,若有不足之处,请予以指教,请勿诋毁,多谢。提示:以下内容以WPS最新版本为...
- 测一测你是什么粒子?_测测你是什么质
-
大亚湾实验。|图片来源:RoyKaltschmidt,LawrenceBerkeleyNationalLaboratory/WikimediaCommons2020年12月12日,大亚湾...
- SpringBoot如何处理配置文件的密文
-
在SpringBoot应用中,直接在配置文件(如application.yml或application.properties)中明文存储数据库密码、API密钥等敏感信息是严重的安全风险,...
- 大语言模型解释Python的 类装饰器
-
一、什么是类装饰器?在Python中,装饰器(Decorator)是一种高阶函数,它接受另一个对象(通常是函数或类),并返回一个经“增强”处理后的新对象。我们常见的是对函数进行装饰:@my_dec...
- Thymeleaf_thymeleaf属于前端吗
-
一、Thymeleaf简介Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和Freemarke...
- Win9去哪了?Win10避讳Windows95、98
-
10月1日,微软在旧金山发布了新一代操作系统预览版。但不是名为Windows9,而是win10,有业内人士猜测,跳过9而取10为命名是为了预示十全十美。可是小编还觉得9还代表长长久久呢!恐怕这里又说...
- 仓颉编程练习-字符串操作_仓颉编译器
-
main.cj:importstd.convert.Parsablemain():Int64{//字符串比较lets1:String="abc"...
- 一课译词:断断续续_一课译词:断断续续的意思
-
PhotobyMikefromPexels“断断续续”,或“时断时续”,意思是时而中断,时而继续地接连下去(continuefromtimetotime)。与英文惯用语“fitsan...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)