场景

我们在写服务端接口时候,往往需要考虑安全问题,最基本的一点就是接口需要按照约定的规则进行签名校验。一旦接口校验签名,就意味着我们用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 () {var data = JSON.parse(request.data);var signKey = pm.environment.get('signKey');var sign = calcSign(data, signKey);pm.globals.set('sign', sign);
})();function calcSign(data, signKey) {delete data['sign'];var keys = [];for(var k in data) {keys.push(k);}keys.sort();var kv = [];for (var v of keys) {kv.push(v + '=' + data[v]);}var kvStr = kv.join('&');var sign =  CryptoJS.HmacSHA1(kvStr, signKey).toString();return sign;
}

我们还需要在请求的Body里加上tssign字段,而且必须用双引号括起来,否则会报错。还要在环境变量或全局变量(视情况而定)里设置signKey字段,如图所示。

代码中使用到了Postman Sandbox的一些常用的内置函数,这里简单介绍一下。Sandbox内置的类库以及完整的Postman API介绍请看最下面的文档,这里无法一一罗列和演示。

  • (function(){ ... })():jQuery的写法,Sandbox内置了jQuery库。
  • pm.environment.get(variableName):获取某个环境变量的值,也可以写成 postman.getEnvironmentVariable(variableName)。
  • pm.globals.set(variableName, variableValue):设置某个全局变量,也可以写成 postman.setGlobalVariable(variableName, variableValue)。
  • CryptoJS.HmacSHA1():内置的CryptoJS库,几乎涵盖所有加密算法,本案例使用了SHA1,大家根据具体签名规则来选择。
  • {{$timestamp}}:动态返回当前时间戳。类似的语法还有{{$guid}}生成唯一ID,{{$randomInt}}生成0到1000的随机整数。

如果每个请求都要加签名,不必为每个请求都写一份重复的Pre-request Script代码。可以在收藏或者文件夹级别统一设置,这样该收藏或文件夹下每一个请求都能执行到。

以上只是Pre-request Script的一个常见的应用场景,它的用途非常之广,等待你去探索!

API文档

  • Postman Sandbox
  • Postman Sandbox API reference

更多内容请阅读《Postman高级应用》专栏

Postman高级应用(5):再也不用注释签名代码了——自动生成签名相关推荐

  1. 使用ant自动生成签名的apk

    eclipse打包apk发布,每次都要输入签名的密码,而且打包的过程很长.特别是同一个程序要配置不同的标识打包,会很耗时,结合ant的使用,可以一键打包,会方便很多. 1.ant 官网可下载  htt ...

  2. 不用电脑在手机上实现自动重签名

    iOS 10 及以上的系统都是不完美越狱,每次重启后需要重新越狱.大部分用户使用的是个人免费账号进行签名,通过 Cydia Impactor 安装 yalu102.H3lix.doubleH3lix. ...

  3. android 签名报错,AndroidStudio生成签名apk报错

    1.AndroidStudio生成签名apk弹出如下错误 Generate Signed APK: Errors while building APK. You can find the errors ...

  4. IDEA注释以及创建类自动生成注释

    1.  单行注释:// (快捷键:ctrl + /) 2.  多行注释:/*      */     (快捷键:ctrl + shift +/) 3.  文档注释:/**    */ 4.配置文件注释 ...

  5. oracle jpa字段加注释,JPA 通过注解自动生成表,添加 字段名、类型、注释

    JPA 通过注解自动生成表,添加 字段名.类型.注释 发布时间:2018-04-13 16:27, 浏览次数:3806 , 标签: JPA JPA对象注解类型 @Table - 映射表名 @Id - ...

  6. 看了这篇 LeetCode 的刷题心得,再也不用抄别人代码了

    作者:VioletJack 原文:<LeetCode 算法题刷题心得>https://www.jianshu.com/p/8876704ea9c8 花了十几天,把<算法>看了一 ...

  7. 看看函数名和注释,AI就能自动生成代码,程序员:这不真实,我要失业

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心  参与:张倩.Racoon X.Jamin 你 ...

  8. 程序员幸福感拉满:一键为代码自动生成注释的工具,拿走不谢!

    提升程序员幸福感的CodeGeeX代码解释功能上线了! 一个"古老的传说":程序员最讨厌的2件事:一是编写程序时要写注释,二是看别人编写的程序里没写注释: 可见,手动为代码添加注释 ...

  9. 在idea中为类和方法自动生成注释

    一.设置类级别的注释(创建类是自动生成注释) 二.设置方法级别的注释 一.设置类级别的注释(创建类是自动生成注释) 图中的代码块: /** * @author ${USER} * @date ${DA ...

最新文章

  1. 基于Pyhton的图像隐写术--如何隐藏图像中的数据
  2. opencv-4.1.0-百度云盘下载链接-环境配置
  3. 20 岁发表 SCI 的学霸,梦想用算法改变世界
  4. 如何查看某个js 变量 runtime 类型
  5. LeetCode 60. 第k个排列(回溯 康托展开)
  6. Android开发笔记(一百三十)截图和录屏
  7. 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App
  8. RedisTemplate和StringRedisTemplate的区别
  9. linux英英词典项目,[开发手记] 一款基于命令行的英英词典 (A CLI-Based EE Dictionary)...
  10. JavaMail实现邮件的发送
  11. 【小白学Java】D14》》》ArrayList应用<两大案例的数据分组聚合>
  12. 企业宣传型小程序特点-微信小程序开发-视频教程23
  13. 免费数据库应用程序工具 - 不需代码
  14. YAML第一章 基本概念及语法
  15. 嵌入式硬件开发之三——绘制原理图
  16. docker修炼手册
  17. Corel 会声会影 2023 胡桃的特别版 v26.0.0.0功能介绍
  18. python识别火车票二维码_Python实现查询12306火车票信息
  19. Server2019任务计划配置笔记
  20. uniapp最好用的二维码生成

热门文章

  1. 正月初七 | 2月18日 星期四 | 京东物流在港交所提交招股书;字节跳动回应在美上市传闻;2021年中国电影总票房破百亿...
  2. Hadoop入门教程 详细的入门实战教程
  3. 高中计算机教师专业,高中计算机教师资格证,要计算机专业证书吗
  4. 找工作的程序员应该这样优化简历【内附120套优质简历模板】
  5. 非标自动化机械设计行业未来发展趋势
  6. 小鸟云:因被黑客窃取190GB文件 厄瓜多尔国营电信公司决定采用云服务器
  7. 网络教育计算机 判断,重庆网络教育计算机应用基础练习题(3)
  8. Email和电子邮箱一样吗?
  9. 服装检索-DeepFashion
  10. android vitamio集成教程,集成Vitamio实现万能播放器(示例代码)