Apifox中实现自定义的加密和签名是通过前后置脚本功能来完成的。这对测试那些具有复杂安全机制的API比较重要,尤其是在一些大型团队测试时能保证测试的安全、一致和自动化。
前后置脚本的加密签名
可以通过编写JavaScript脚本,在请求发送前(前置)动态处理数据,或在收到响应后(后置)进行解密。
参数签名:加密方式MD5, HMAC-SHA256等。前置脚本。操作 pm.request 对象,对参数排序、拼接、加密,并将签名结果添加到请求中。使用内置 CryptoJS 库。关键在于按接口规范拼接“签名字符串”,并处理好密钥的管理。
请求体加密:加密方式RSA (非对称加密),前置脚本。使用 jsrsasign 等外部库,用公钥加密整个或部分请求体。注意长文本需分段加密,后端解密通常按128字节分块,前端(JS)对应为256位十六进制。
响应体解密:加密方式RSA, AES, Base64,后置脚本。操作 pm.response 对象,获取加密的响应数据,解密后重新设置到响应体中。RSA解密同样需分段处理。AES解密需保证模式、填充方式和后端一致。
动态令牌管理:加密方式JWT, OAuth Token,前置脚本。检查环境变量中令牌的有效性,过期时自动调用登录接口刷新。使用 pm.sendRequest 发送登录请求,将新令牌存入环境变量供后续使用。
自动化方式
保证脚本执行顺序
如果请求参数中包含变量(如 {{timestamp}}),签名必须在变量被替换为实际值后进行,否则签名会失效。需要在前置操作中,手动调整操作顺序,将“自定义脚本”排在系统自带的 “变量替换”操作之后。
模块化和公共脚本
将通用的签名/加密算法(如公司统一的签名规范)封装为 “公共脚本”。之后,可在项目、目录或单个接口的“前置操作”中直接引用,避免代码重复,便于统一更新。
安全地管理密钥
切勿将密钥硬编码在脚本里。应统一存储在 “环境变量” 或 “全局变量” 中。在团队协作时,通过配置不同环境(开发、测试、生产)来隔离密钥。
集成自动化测试和CI/CD
测试套件:将已配置安全脚本的接口编排成业务测试流程,Apifox会自动按顺序执行。
CLI集成:使用 apifox-cli 在命令行运行测试套件。可集成到Jenkins、GitLab CI等平台,在代码构建后自动进行API回归测试,并生成测试报告。
对于一个新项目或团队,建议按以下步骤系统性地建立这套方法:
第一步:分析归档
集中分析所有需要加密、签名的接口,归档其算法、密钥、参数顺序等规则,形成内部文档。
第二步:基础建设
在Apifox项目中配置好各环境(开发、测试、生产)及对应的环境变量(如 base_url, app_key, app_secret)。
第三步:脚本开发和封装
根据第一步的文档,为每种签名/加密算法编写并调试脚本。将经过验证的脚本保存为 “公共脚本”。
第四步:应用集成
将公共脚本应用到对应的接口或目录上。开始编排测试套件,并尝试在CI/CD流程中接入apifox-cli进行自动化测试。
在Apifox中实现高级安全测试就是熟练运用前后置脚本处理复杂逻辑,并通过公共脚本和自动化测试将它转化为团队的标准化的可复用的。