Postman访问加密接口(RSA)

在Postman中,对post参数进行RSA加密的方法。

  1. 首先Body栏目,设置为JSON格式,按图1格式定义加密字段{{rsaBody}},在Pre-request Script栏目会用到。
    也可以定义多个加密字段,名称加{{ }}即可,这可以看作是Postman中定义变量的方法。
图1
{
    "body":"{{rsaBody}}"
}
  1. Pre-request Script栏目,填入以下代码,并修改clearTextencrypt_key内容。该栏目中的javascript代码会在每次请求发送前执行。
图2
//Pre-request Script
//--------------以下为需要加密的内容,可以根据需求定义多个------------------//
var clearText = '{"arg1":"abc","arg2":123,"arg3":4.56}';   //对应{{rsaBody}}的明文
// var clearText = '{"arg1":"def","arg2":123,"arg3":7.89}';

//---------------------------------------------------------------------//
const encrypt_key = '(密钥复制到此处)';
const forge_url = 'https://lzq1357.gitee.io/various/forge_min.js';
//forge_min.js来自:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js
//---------------------------------------------------------------------//

function encryptRsa(encrypt_key, clearText){
    console.info('cleartext: ' + clearText);
    //注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
    const public_key = '-----BEGIN PUBLIC KEY-----\n'
            + encrypt_key
            + '\n-----END PUBLIC KEY-----';
    var publicKey = forge.pki.publicKeyFromPem(public_key);
    var buffer = forge.util.createBuffer(clearText, 'utf8');
    var bytes = buffer.getBytes();
    var encryptedText = forge.util.encode64( publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', {
            md: forge.md.sha256.create(),
            mgf1: {
                md: forge.md.sha1.create()
            }
        })
    );
    console.info('encryptedText: '+ encryptedText);
    return encryptedText;
};

// 第一次运行时从网络加载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 forgs.js: Succeed, please try again");
                //注意:Pre-request Script中出现报错,可能会导致pm.globals.set失效
                pm.globals.set('forgeJS', res.text());
            }
        }
    );
    return;
}
eval(pm.globals.get('forgeJS'));

//------------------以下内容根据需要修改定义,可以加密多个字段------------------------//
var encryptedText = encryptRsa(encrypt_key, clearText);
postman.setEnvironmentVariable("rsaBody", encryptedText);     //rsaBody对应Body中{{}}

clearText变量是需要加密的明文内容,encrypt_key是加密的密钥,encryptedText是加密后的密文,最后通过postman.setEnvironmentVariable("rsaBody", encryptedText);将密文赋值给Body栏目对应的字段。
注意:Pre-request Script中出现报错,可能会导致pm.globals.set失效

  1. 到这里就可以访问接口了。值得注意的是,第一次运行时需要从网上加载一个js脚本,不会执行加密。正常情况下第二次访问可以成功

参考:

  1. 在Postman中使用rsa加密
  2. 如何在Postman里对参数进行SHA1WithRSA数字签名
  3. https://github.com/loveiset/RSAForPostman
  4. https://github.com/digitalbazaar/forge
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容