场景
我们在写服务端接口时候,往往需要考虑安全问题,最基本的一点就是接口需要按照约定的规则进行签名校验。一旦接口校验签名,就意味着我们用Postman不能想以前那样顺利的测试了,服务端必定会返回签名失败。我们在本地开发时候,一定有不少开发同学是通过注释掉验签代码来绕开签名,但往往提交代码时候又不小心提交上去。灵活点的签名校验可能会忽略掉来自本机请求的验签,我们这里假设系统设计的没这么灵活,而且即使这样灵活设计也还是解决不了外网要测试dev qa环境的接口无法通过验签的问题。下面我们就利用Postman强大的Pre-request Script功能来实现自动为每个请求生成服务端需要的签名参数。
Pre-request Script
在开始编写案例之前,先简单介绍一下Postman的Pre-request Script到底是个什么东西?从字面意思能猜测出这是一个在请求之前会执行的脚本,我们看下官方给出的流程图,就可以证明我们的猜想。
Pre-request Script是通过Postman的沙盒(Sandbox)来实现的,而Sandbox是一个JavaScript执行环境,里面内置了一部分常用的JS库和函数(下面会介绍到)。所以我们其实是通过编写JavaScript代码,代码在请求发出前先被执行,从而达到自动生成签名的目的。
实战
先切换到Pre-request Script
选项卡,开始编写JavaScript代码。
假设服务端的签名算法如下:所有请求参数都放在Body
里以json
格式提交,里面必须包含一个当前时间戳ts
以及签名后得到的sign
。对body中除了sign
以外的所有字段签名(暂时不考虑json有数组的情况),先按照key升序
排列,然后以key=value
的形式用&
拼接字符串,最后用签名密钥signKey
对拼接后的字符串进行SHA1
签名得到sign
。我们直接贴代码吧。
(function () {