接口自动化 - 接口鉴权处理常用方法

文章目录

  • [1. 接口鉴权通用解决方案](#1. 接口鉴权通用解决方案)
  • [2. 后端接口鉴权常用方法](#2. 后端接口鉴权常用方法)
    • cookie
    • token
    • [auth - 了解](#auth - 了解)
    • [oauth2 - 微信小程序鉴权](#oauth2 - 微信小程序鉴权)
  • [3. 各种鉴权方式介绍](#3. 各种鉴权方式介绍)
    • cookie鉴权
    • [token 鉴权](#token 鉴权)
    • [auth - 了解](#auth - 了解)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1. 接口鉴权通用解决方案

  1. 接口认证信息获取
  2. 发现接口请求进行认证信息的携带

2. 后端接口鉴权常用方法

  • 1.携带身份信息请求认证
  • 2.之后的每次请求都携带cookie信息,cookie记录在请求头中

token

  • 1.携带身份信息请求认证
  • 2.之后的每次请求都携带token认证信息
  • 3.可能记录在请求头,可能记录在url参数中

auth - 了解

  • 每次请求携带用户的username和password,并对其信息加密

oauth2 - 微信小程序鉴权

  • 1.携带身份信息请求认证
  • 2.服务端向指定回调地址回传code
  • 3.通过code获取token
  • 4.之后的请求信息都携带token。
    典型产品 :微信自动化测试

3. 各种鉴权方式介绍

cookie鉴权

  1. cookie 的获取(根据接口文档获取)
  2. 发送携带 cookie 的请求
    2.1直接通过调用 cookie 方法
    2.2通过在 filter 中添加 cookieFilter 对象

使用cookieFilter方法:

1.创建CookieFilter对象

2.在获取cookie或添加cookie的地方使用

也就是在请求头中使用filter()方法,传递参数是-cookieFilter对象

如:given().filter(CookieFilter对象)

方式一:直接通过.cookie()方法获取

前提:已有对应cookie鉴权信息,请求头中指定cookie需要存放的信息即可

java 复制代码
@Test
void addCookie() {
   given()
       //可以使用字符串 或 键值对(第一个key, 第二个是value)
       .cookie("user", "ad")
   .when()
  	   .get("https://httpbin.org/cookies")
   .then()
       .log().all();
}

方式二:使用CookieFilter对象,given()中的filter()方法-REST-assure自带方法

【注】

一般是不知道cookie需要存放的鉴权信息是什么

需要模拟正常set-cookie过程,获取cookie需要存放的信息

禁止重定向方法: .redirects().follow(false) -默认follow()方法中为true,代表允许重定向;

java 复制代码
@Test
void addCookieByFile() {
    //1.创建CookieFilter对象
    CookieFilter cookieFilter = new CookieFilter();
    //第一次请求获取cookie, 不进行重定向
    given()
        //禁止重定向,默认为true
        .redirects().follow(false)
       //使用filter()方法,获取set-cookie信息
        .filter(cookieFilter)
    .when()
    	//请求带有set-cookie返回的接口
        .get(setUrl)
    .then()
        .log().all();
    //第二次请求,携带cookie,会通过cookieFilter 自动添加相应cookie
    given()
        //使用filter()方法,添加cookie信息
        .filter(cookieFilter)
    .when()
        .get(url)
    .then()
        .log().all();
    //第3次请求,携带cookie,使用cookieFilter自动添加,还可以手动cookie()方法继续添加
    given()
        //使用filter()方法,添加cookie信息
        .filter(cookieFilter).cookie("test", "2")
    .when()
        .get(url)
    .then()
        .log().all();
}

token 鉴权

操作步骤:

1.token获取-根据接口文档获取

如:登录接口,请求后会响应会返回token信息

2.发送携带token的请求-根据接口文档获取

【注】发送带token的请求,需要注意token处理逻辑,也就是token放在那,请求头还是url中,工作中问后端或前端进一步了解。(或者看接口文档中是否有说明)

java 复制代码
@Test
void tokenTest() {
    //1.获取token ->请求有token的接口
    String bodyData = "{\"username\":\"zs\",\"password\":\"123\",\"code\":\"\"}";
    String token = given()
        .contentType("application/json;charset=UTF-8")
        .body(bodyData)
    .when()
        .post("https://litemall.com/admin/auth/login")
    .then()
        .log().all().extract().path("data.token");

    //2.再次请求其他接口,携带token
    //因为其他接口需要在登录后,才能访问,需要token
    given()
        .headers("x-litemall-admin-token", token)
    .when()
        .get("https://litemall.com/admin/goods/list")
    .then()
        .log().all()
        .statusCode(200);
}

auth - 了解

目前公司使用的不多

  1. 在基本 HTTP 身份验证中,请求包含格式为 的标头字段Authorization: Basic
  2. 其中credentials是 ID 和密码的Base64编码,由单个冒号连接:。

一般请求头中显示:

authorization: Basic credentials

java 复制代码
@Test
void addAuth() {
    RestAssured.proxy = host("localhost").withPort(8889);
    RestAssured.useRelaxedHTTPSValidation();
    String authUrl = "需要被测的接口地址";
    given()
         //在given()通过.auth().basic("用户名","密码")
        .auth().basic("user", "ad")
    .when()
        .get(authUrl)
    .then()
    .log().all();
}

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
华仔啊19 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing19 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide2 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家2 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺2 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602732 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程2 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes