web接口测试之用户认证和数字签名

本文介绍了用户认证和数字签名的基本概念及测试方法。重点讨论了如何使用Requests库进行用户认证,以及数字签名中MD5加密的具体实现。此外,还列举了一些常见的测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户认证

在我们测试 web 接口时,不管所用的工具还是Requests 库都提供的 Auth 的选项,这个选项同样需要填写username 和 password,但这里 Auth 的用户名和密码与系统登录的用户名密码有区别,因为Auth不是作为GET/POST请求的参数发送的,在requests库里面是一个控制参数,是一个元组类型。

例子:

r = requests.get(url,auth=('username','password'), params={'id':'111'})
result= r.json()

用户认证测试还是蛮简单的,一般考虑的用例:

  • auth为空,不传输auth;
  • auth错误;
  • auth正确;
  • 其它用例。

数字签名

鉴权

数字签名一般是指通过鉴权来保证接口传输的安全性, 通过客户端密匙和服务端的密匙相匹配就是鉴权

例如签名钥匙sign = asd123,

加上签名后,接口传输参数是:

http://xxx:8080/?a=1&b=2&sign=asd123,但是明文传输sign参数是不安全的,所以要经过通过md5加密 。

所以,密匙跟着参数一起传输到服务器的。

MD5加密例子:

。。。。。。

数据防篡改

将整个接口参数生成加密字符串,安全性更高,只是所谓的全参加密,但是全参加密也有弊端,因为MD5是不可逆的,服务器也必须知道接口的参数值才能MD5加密验证,否则验证失败。一般接口设计时对客户端请求参数并不知道。一般不用全参加密。

在接口开发过程中,一般通过时间戳+sign作为密匙加密传输。

这种情况测试接口时,通过获取时间戳和拿到sign密匙后,再拼接成一个字符串,再加密这个字符串,然后和参数一起传输。

MD5时间戳和sign的例子:

>>> sign_key = 'asd123'      #key
>>> from time import *
>>> now_time = time()        #获取当前时间
>>> c_time = str(now_time).split('.')[0]  #获取.之前的时间戳
>>> sign = c_time + sign_key #拼接成一个字符串
>>> sign
'1493187284asd123'
>>> import hashlib           #MD5加密
>>> md5 = hashlib.md5()
>>> sign_bytes_uft8 = sign.encode(encoding='utf-8')
>>> md5.update(sign_bytes_uft8)
>>> sign_md5 = md5.hexdigest()
>>> sign_md5
'a1f3a6ac4416dea5a148967b81ce68f9'
当前时间戳+key加密后,就可以作为参数直接传输了,下面测测试数字签名的接口用例:

测试接口需要根据怎么靠法接口来测试,

请求参数错误;

签名参数为空;

签名错误;

请求超时(如果开发接口时有请求时间限制的话)

数字签名正确;

其他。。。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值