0


Postman使用RSA加密字段及保存认证token

Postman使用RSA加密字段及保存认证token

现有项目中认证使用OAuth2进行认证,为了安全密码用RSA加密,调试接口时需要先生成密码再调试,于是是否可以用Postman用RSA加密方式自动生成密码。研究发现Postman并没有自带RSA加密方式,现有的方案是使用第三方模块forge.js来实现加密,决定使用forge.js来实现RSA方式加密。

下载及安装forge.js

准备环境

安装git、nodejs,具体安装方法不在本方中赘述,不会可以问度娘。

下载forge.js

// github 下载
git clone https://github.com/digitalbazaar/forge.git

// gitee 下载
git clone https://gitee.com/mirrors_digitalbazaar/forge_1.git

安装forge.js

npminstall

配置Postman

编写Pre-request Script脚本

想要加密Postman字段得需要用到Postman的Pre-request Script脚本编辑器,脚本如下。

//postman自带的加密函数是cryptoJS,无法满足;因此需要引用第三方库forge.js//调用forge.js服务的地址:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js打不开时,就用https://lzq1357.gitee.io/various/forge_min.jsconst forge_url ="https://lzq1357.gitee.io/various/forge_min.js"// 提取{{}}中内容functiongetBracketStr(text){let result =''let regex =/{{(.+?)}}/g;let options = text.match(regex);if(options && options.length >0){let option = options[0];if(option){
            result = option.substring(2, option.length -2)}}return result
}// RSA加密方法functionrsaEncrypt(content){// RSA公钥密码保存在全局变量rsa_pub_key里var public_key ='-----BEGIN PUBLIC KEY-----\n'+
                pm.globals.get("rsa_pub_key")+'\n'+'-----END PUBLIC KEY-----'//公钥转化为pem格式var publicKey = forge.pki.publicKeyFromPem(public_key)//创建缓冲区,所需要加密内容设置编码格式var buffer = forge.util.createBuffer(content,'utf8')//转化为字节var bytes = buffer.getBytes()//加密函数,把明文使用'RSAES-PKCS1-V1_5'加密成密文,并使用Base64编码输出var encryptedText = forge.util.encode64(publicKey.encrypt(bytes,'RSAES-PKCS1-V1_5',{md:forge.md.sha256.create(),mgf1:{md:forge.md.sha1.create()}}));return encryptedText;};// ------------ AES 加密 ------------functionaesEncrypt(content){const key = CryptoJS.enc.Utf8.parse(pm.globals.get("aes_key"));const iv = CryptoJS.enc.Utf8.parse(pm.globals.get("aes_iv"));const encrypted = CryptoJS.AES.encrypt(content, key,{iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return encrypted.toString();}//第一次运行时从网络加载forgeJS,会导致请求失败if(!pm.globals.has('forgeJS')){
    console.log('request forge.js from '+ forge_url)
    pm.sendRequest(forge_url,function(err,res){if(err){
            console.error(err)}else{// console.info("request forge.js: Succeed,please try again")
            pm.globals.set('forgeJS',res.text())}});return;};//设置全局变量forgeJSeval(pm.globals.get('forgeJS'))// 获取当前请求中的加密变量 判断为字符串还是环境变量,环境变量一定是"{{}}" 格式let requestData;if((typeof request.data)==='string'){
    requestData =JSON.parse(request.data)}else{
    requestData = request.data;}// Object.assign 拷贝对象 将request.headers 中的所有数据,拷贝到 requestData中
requestData = Object.assign(requestData, request.headers);// 遍历
Object.keys(requestData).map(key=>{// 内容let value = requestData[key]+'';// 是否为变量if(value.indexOf('{{')!==-1){let content =getBracketStr(value);// 判断用是否加密,并选择加密方式if(content.indexOf('aes:')!==-1){let c = content.split('aes:')[1];let encryptedContent = pm.environment.get(c);// 加密内容
            encryptedContent = encryptedContent ? encryptedContent : c;
            pm.environment.set(content,aesEncrypt(encryptedContent));}elseif(content.indexOf('rsa:')!==-1){let c = content.split('rsa:')[1];let encryptedContent = pm.environment.get(c);// 加密内容
            encryptedContent = encryptedContent ? encryptedContent : c;
            pm.environment.set(content,rsaEncrypt(encryptedContent));}}});

配置密码到全局变量

Pre-request Script脚本需要配置全局变量rsa_pub_key,aes_key,aes_iv具体配置如下图。
全局变量配置图

使用方法

需要加密的字段使用 {{aes:123456}} 或者 {{rsa:123456}} 来配置,aes或者rsa指加密方式,冒号后面是密码的明文。具体配置如下图所示。
加密使用方法

保存OAuth2认证token信息

保存OAuth2认证token信息需要用到Postman和Tests脚本,如保存其 access_token、token_type、refresh_token等。

配置Tests脚本

var jsondata =JSON.parse(responseBody);var access_token = jsondata.token_type +' '+ jsondata.access_token;var refresh_token = jsondata.token_type +' '+ jsondata.refresh_token;
pm.globals.set("access_token", access_token);
pm.globals.set("refresh_token", refresh_token);

使用方法

如加密字段一样,通过 {{access_token}} 来使用。示例如下图所示。
token使用方法
至此,Postman使用RSA加密字段及保存认证token已经完成!!

标签: postman 测试工具

本文转载自: https://blog.csdn.net/qq_32761243/article/details/135695718
版权归原作者 lxfdmwin 所有, 如有侵权,请联系我们删除。

“Postman使用RSA加密字段及保存认证token”的评论:

还没有评论