前言
在接口测试中,我们经常需要对请求进行签名,以保证数据的安全性。而SHA256withRSA是一种较为常见的签名算法,它可以使用私钥对数据进行签名,使用公钥进行验签。
但是,实现该算法签名可能会涉及到一些繁琐的操作,给我们的工作带来不小的困扰。
今天,我要向大家介绍一个神器------Postman,它可以轻松完成SHA256withRSA签名的实现,让您的API请求得到更加完善的保护。
接下来,我将简单介绍如何使用Postman实现SHA256withRSA签名,并且分享一些注意事项和技巧,希望能让大家轻松掌握这个技能。
获取pmlib
引入依赖bundle.js,有以下两种方式:
-
从github下载postman collection ,并导入进你的集合里 。
-
把自己的私钥设置成环境变量如:pri_key
使用Pre-request Script对请求进行加签(具体加签字段请看自己项目)
-
// 使用eval执行js
-
eval(pm.globals.get('pmlib_code'))
-
// 生成rfctime
-
let date = new Date()
-
let y = date.getFullYear()
-
let m = date.getMonth()+1<10?'0'+(date.getMonth()+1):(date.getMonth()+1)
-
let d = date.getDate()<10?'0'+date.getDate():date.getDate()
-
let hh = date.getHours()<10?'0'+date.getHours():date.getHours();
-
let mm = date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes()
-
let ss = date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds()
-
this.rfc_time = y +'-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss
-
this.rfc_time = this.rfc_time.replace(/\s+/g, 'T')+'+08:00'
-
pm.variables.set('rfctime',this.rfc_time)
-
// console.log(pm.variables.get('rfctime'))
-
const privkey = pm.environment.get('pri_key').replace(/\\n/g, "\n")
-
// 随机字符串
-
const uuid = pm.variables.replaceIn('{``{$randomUUID}}')
-
pm.variables.set('nonce_str', uuid)
-
const requestBodyRaw = pm.variables.replaceIn(pm.request.body == undefined ? '' : pm.request.body.raw)
-
const now = pm.variables.replaceIn('{``{$timestamp}}')
-
pm.variables.set('req_time', now)
-
// 具体加密字段拼接请依据项目情况案例是:method+\n+url+\n+timestamp+\n+nonce_str+\n+body
-
var dataToSign = pm.request.method + "\n" +
-
pm.request.url.getPathWithQuery() + "\n" +
-
now + "\n" +
-
uuid + "\n" +
-
requestBodyRaw
-
console.log(dataToSign)
-
const sha256withrsa = new pmlib.rs.KJUR.crypto.Signature({"alg": "SHA256withRSA"});
-
sha256withrsa.init(privkey);
-
sha256withrsa.updateString(dataToSign);
-
const sign = pmlib.rs.hextob64(sha256withrsa.sign());
-
// console.log(sign);
-
pm.variables.set('sign', sign)
-
// 添加请求头
-
pm.request.headers.add({
-
key:"Authorization",
-
value:"SHA256-RSA nonce_str={``{nonce_str}},timestamp={``{req_time}},signature={``{sign}}"
-
});
使用Pre-request Script对请求进行加签(具体加签字段请看自己项目)
-
// 使用eval执行js
-
eval(pm.globals.get('pmlib_code'))
-
// 生成rfctime
-
let date = new Date()
-
let y = date.getFullYear()
-
let m = date.getMonth()+1<10?'0'+(date.getMonth()+1):(date.getMonth()+1)
-
let d = date.getDate()<10?'0'+date.getDate():date.getDate()
-
let hh = date.getHours()<10?'0'+date.getHours():date.getHours();
-
let mm = date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes()
-
let ss = date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds()
-
this.rfc_time = y +'-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss
-
this.rfc_time = this.rfc_time.replace(/\s+/g, 'T')+'+08:00'
-
pm.variables.set('rfctime',this.rfc_time)
-
// console.log(pm.variables.get('rfctime'))
-
const privkey = pm.environment.get('pri_key').replace(/\\n/g, "\n")
-
// 随机字符串
-
const uuid = pm.variables.replaceIn('{``{$randomUUID}}')
-
pm.variables.set('nonce_str', uuid)
-
const requestBodyRaw = pm.variables.replaceIn(pm.request.body == undefined ? '' : pm.request.body.raw)
-
const now = pm.variables.replaceIn('{``{$timestamp}}')
-
pm.variables.set('req_time', now)
-
// 具体加密字段拼接请依据项目情况案例是:method+\n+url+\n+timestamp+\n+nonce_str+\n+body
-
var dataToSign = pm.request.method + "\n" +
-
pm.request.url.getPathWithQuery() + "\n" +
-
now + "\n" +
-
uuid + "\n" +
-
requestBodyRaw
-
console.log(dataToSign)
-
const sha256withrsa = new pmlib.rs.KJUR.crypto.Signature({"alg": "SHA256withRSA"});
-
sha256withrsa.init(privkey);
-
sha256withrsa.updateString(dataToSign);
-
const sign = pmlib.rs.hextob64(sha256withrsa.sign());
-
// console.log(sign);
-
pm.variables.set('sign', sign)
-
// 添加请求头
-
pm.request.headers.add({
-
key:"Authorization",
-
value:"SHA256-RSA nonce_str={``{nonce_str}},timestamp={``{req_time}},signature={``{sign}}"
-
});
至此SHA256withRSA签名已完成
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
-
文档获取方式:
-
加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取