python接口自动化之cookie,session,token鉴权解决方案

http协议:简单、快捷、无连接、无状态。多次请求之间是没有关联的,独立的。

一、cookie鉴权

1、什么是cookie?

cookie是在服务器产生的存储在客户端的一小段文本信息,格式是字典,键值对。

2、cookie的分类

会话级:保存内容,当浏览器关闭就会丢失
持久化:保存硬盘,只有当失效时间到了才会被清除

3、如何查看cookie

name,value、domain、path、express、size

4、cookie如何实现鉴权(原理)

当客户端第一次访问服务器时,那么服务器就会产生cookie,然后通过相应头的方式在Set-Cookie传输到客户端。客户端从第2-N次请求都会自动的带上这些cookie。

致命的弱点:cookie保存在客户端,对于一些敏感信息,用户名,密码,身份证。 不安全

第一个接口:
python接口自动化之cookie,session,token鉴权解决方案_第1张图片
第二个接口:
python接口自动化之cookie,session,token鉴权解决方案_第2张图片

二、session鉴权

当用户第一次访问服务器的时候,然后再服务器端保存一个sessionid,这个sessionid是经过加密的,然后通过cookie吧这个sessionid保存到客户端,然后请求服务器的时候只发送sessionid。
sessionid保存在服务器内存中。

致命弱点:解决了cookie不安全的问题,但是随着又出现了新的问题。当用户量特别大的时候,会导致服务器崩溃。
服务器集群: 请求IP捆绑、session复制、单点登录。

第一个接口:
python接口自动化之cookie,session,token鉴权解决方案_第3张图片
第二个接口:
python接口自动化之cookie,session,token鉴权解决方案_第4张图片

三、token鉴权

当一个用户登录之后,就给他发送一个token令牌,下一次用户再次请求的时候,只要带上这个令牌。token可以通过抓包抓取(http)
token保存在文件中或是保存在数据库中。
加密:
对称加密:des aes
双钥加密:RSA
python接口自动化之cookie,session,token鉴权解决方案_第5张图片

只加密不解密:md5 SHA
token的分类:
access_token:有时间期限,限制在15分钟
refresh_token:一般15天

第一个接口:
python接口自动化之cookie,session,token鉴权解决方案_第6张图片
第二个接口:
python接口自动化之cookie,session,token鉴权解决方案_第7张图片

四、cookie、session、token的相同点和区别?

相同点:都是用于做鉴权的,都是服务器产生的。
区别:
(1)cookie存储在客户端,session存储在服务器,session的安全性比cookies高。所以一般情况下把重要的信息放在session,把不重要的放cookies。
(2)session存在服务器内存,token存在服务器的为难或者数据库中,token的好处是比session更省服务器资源。token只需要在服务器解密即可。

自动化层面:
工具:postman、jmeter
代码:借口关联,cookie鉴权、session鉴权、web自动化用cookie跳过验证码

出现了新的问题:第三方支付,银行,金融项目,安全的要求更高。

数字证书:
python接口自动化之cookie,session,token鉴权解决方案_第8张图片

五、接口签名:sign

既可以在工具里面解决,也可以在代码里面解决。
为什么我们有工具postman、jmeter,那么我们为什么做代码级别的接口自动化?
(1)敏捷开发:接口巨大 不容易做版本控制和团队协作
(2)工具太死,我们需要自定义一些功能
(3)一个项目中有多种协议的接口
(4)定位问题
(5)工具,没有办法生成美观的报告。allure
(6)对于复杂的接口,多接口协议,数据库
(7)日志监控
(8)接口自动化 web自动化
深度:接口自动化
(1)所有的请求都必须要统一管理
(2)封装好接口自动化测试框架之后,功能测试只需要写测试用例,不需要写代码

1、什么是接口签名?

使用用户名、密码、时间戳和所有排过序的参数组合起来,再加密得到的字符串,字符串是唯一的幼犬访问第三方金融接口的鉴权码。=sign接口签名。

2、为什么需要做接口签名?

1、防伪装攻击 2、防篡改攻击 3、防重放攻击 4、防数据泄露

3、如何做接口签名,了解签名规则

1、对所有请求的参数按key按ASCII码做升序排列
{“c”:“3”,“b”:“2”,“a”:“1”} ➡️ {“a”:“1”,“b”:“2”,“c”:“3”}
2、把参数名和参数值连接成字符串
a=1&b=2&c=3
3、用申请到的appid和appsecret连接到字符串的头部
appid:用户名 appsecret:密码
appid=admin&appsercet=123&a=1&b=2&c=3
4、用时间戳链接到字符串的尾部
appid=admin&appsercet=123&a=1&b=2&c=3×tamp=786276574
5、然后把这个字符串按照32位的MD5加密,加密后再转化成大写。
sign=***
10秒有效

你可能感兴趣的:(测试,python)