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

文章目录

  • [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();
}

总结

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

相关推荐
绝知此事1 分钟前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海7 分钟前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠1 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
裴东青1 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
哎呦,帅小伙哦1 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
德思特2 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
sxgzzn2 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫2 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
YOU OU2 小时前
Spring IoC&DI
java·数据库·spring
迁移科技2 小时前
告别人工分拣!迁移科技 AI+3D 视觉让机器人 “看懂” 无序抓取
人工智能·科技·3d·机器人·自动化·视觉检测