Postman轻松签名,让SHA256withRSA保驾护航!

前言

接口测试中,我们经常需要对请求进行签名,以保证数据的安全性。而SHA256withRSA是一种较为常见的签名算法,它可以使用私钥对数据进行签名,使用公钥进行验签。

但是,实现该算法签名可能会涉及到一些繁琐的操作,给我们的工作带来不小的困扰。

今天,我要向大家介绍一个神器------Postman,它可以轻松完成SHA256withRSA签名的实现,让您的API请求得到更加完善的保护。

接下来,我将简单介绍如何使用Postman实现SHA256withRSA签名,并且分享一些注意事项和技巧,希望能让大家轻松掌握这个技能。

获取pmlib
引入依赖bundle.js,有以下两种方式:
  1. 从github下载postman collection ,并导入进你的集合里

  2. 所需js所需js所需js全部复制保存成一个全局变量如:pmlib_code

  3. 把自己的私钥设置成环境变量如:pri_key

使用Pre-request Script对请求进行加签(具体加签字段请看自己项目)

  1. // 使用eval执行js

  2. eval(pm.globals.get('pmlib_code'))

  3. // 生成rfctime

  4. let date = new Date()

  5. let y = date.getFullYear()

  6. let m = date.getMonth()+1<10?'0'+(date.getMonth()+1):(date.getMonth()+1)

  7. let d = date.getDate()<10?'0'+date.getDate():date.getDate()

  8. let hh = date.getHours()<10?'0'+date.getHours():date.getHours();

  9. let mm = date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes()

  10. let ss = date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds()

  11. this.rfc_time = y +'-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss

  12. this.rfc_time = this.rfc_time.replace(/\s+/g, 'T')+'+08:00'

  13. pm.variables.set('rfctime',this.rfc_time)

  14. // console.log(pm.variables.get('rfctime'))

  15. const privkey = pm.environment.get('pri_key').replace(/\\n/g, "\n")

  16. // 随机字符串

  17. const uuid = pm.variables.replaceIn('{``{$randomUUID}}')

  18. pm.variables.set('nonce_str', uuid)

  19. const requestBodyRaw = pm.variables.replaceIn(pm.request.body == undefined ? '' : pm.request.body.raw)

  20. const now = pm.variables.replaceIn('{``{$timestamp}}')

  21. pm.variables.set('req_time', now)

  22. // 具体加密字段拼接请依据项目情况案例是:method+\n+url+\n+timestamp+\n+nonce_str+\n+body

  23. var dataToSign = pm.request.method + "\n" +

  24. pm.request.url.getPathWithQuery() + "\n" +

  25. now + "\n" +

  26. uuid + "\n" +

  27. requestBodyRaw

  28. console.log(dataToSign)

  29. const sha256withrsa = new pmlib.rs.KJUR.crypto.Signature({"alg": "SHA256withRSA"});

  30. sha256withrsa.init(privkey);

  31. sha256withrsa.updateString(dataToSign);

  32. const sign = pmlib.rs.hextob64(sha256withrsa.sign());

  33. // console.log(sign);

  34. pm.variables.set('sign', sign)

  35. // 添加请求头

  36. pm.request.headers.add({

  37. key:"Authorization",

  38. value:"SHA256-RSA nonce_str={``{nonce_str}},timestamp={``{req_time}},signature={``{sign}}"

  39. });

使用Pre-request Script对请求进行加签(具体加签字段请看自己项目)

  1. // 使用eval执行js

  2. eval(pm.globals.get('pmlib_code'))

  3. // 生成rfctime

  4. let date = new Date()

  5. let y = date.getFullYear()

  6. let m = date.getMonth()+1<10?'0'+(date.getMonth()+1):(date.getMonth()+1)

  7. let d = date.getDate()<10?'0'+date.getDate():date.getDate()

  8. let hh = date.getHours()<10?'0'+date.getHours():date.getHours();

  9. let mm = date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes()

  10. let ss = date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds()

  11. this.rfc_time = y +'-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss

  12. this.rfc_time = this.rfc_time.replace(/\s+/g, 'T')+'+08:00'

  13. pm.variables.set('rfctime',this.rfc_time)

  14. // console.log(pm.variables.get('rfctime'))

  15. const privkey = pm.environment.get('pri_key').replace(/\\n/g, "\n")

  16. // 随机字符串

  17. const uuid = pm.variables.replaceIn('{``{$randomUUID}}')

  18. pm.variables.set('nonce_str', uuid)

  19. const requestBodyRaw = pm.variables.replaceIn(pm.request.body == undefined ? '' : pm.request.body.raw)

  20. const now = pm.variables.replaceIn('{``{$timestamp}}')

  21. pm.variables.set('req_time', now)

  22. // 具体加密字段拼接请依据项目情况案例是:method+\n+url+\n+timestamp+\n+nonce_str+\n+body

  23. var dataToSign = pm.request.method + "\n" +

  24. pm.request.url.getPathWithQuery() + "\n" +

  25. now + "\n" +

  26. uuid + "\n" +

  27. requestBodyRaw

  28. console.log(dataToSign)

  29. const sha256withrsa = new pmlib.rs.KJUR.crypto.Signature({"alg": "SHA256withRSA"});

  30. sha256withrsa.init(privkey);

  31. sha256withrsa.updateString(dataToSign);

  32. const sign = pmlib.rs.hextob64(sha256withrsa.sign());

  33. // console.log(sign);

  34. pm.variables.set('sign', sign)

  35. // 添加请求头

  36. pm.request.headers.add({

  37. key:"Authorization",

  38. value:"SHA256-RSA nonce_str={``{nonce_str}},timestamp={``{req_time}},signature={``{sign}}"

  39. });

至此SHA256withRSA签名已完成

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

相关推荐
测试老哥11 小时前
6个步骤实现Postman接口压力测试
自动化测试·软件测试·测试工具·测试用例·接口测试·压力测试·postman
我发在否1 天前
Lua > OpenResty HelloWorld
lua·openresty
北岛三生1 天前
ISP(图像信号处理器)
图像处理·数码相机·测试工具·计算机视觉·测试用例·模块测试
测试界清流1 天前
postman接口功能测试
开发语言·lua
北岛三生2 天前
Camera tuning flow相机调试流程
图像处理·数码相机·测试工具·模块测试
lanhuazui102 天前
lua中table键类型及lua中table的初始化有几种方式
lua
晋人在秦 老K2 天前
入梦工具箱怎么检测硬件?3步完成CPU-Z跑分测试 硬件检测总出错?图吧工具箱免费功能实测 draw.io 部署指南:私有化流程图服务搭建教程
测试工具·流程图·工具·draw.io
zhangzeyuaaa2 天前
Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析
selenium·测试工具
程序猿多布2 天前
Lua和C#比较
c#·lua
泛联新安3 天前
如何根据项目需求选择合适的软件测试工具?iUnit智能单元测试平台提供专业化解决方案
c++·测试工具·单元测试