Linux下使用 Postman 进行接口保护的要点
在 Linux 桌面环境下,Postman 的接口保护主要围绕身份认证、请求加密与签名、敏感信息管理以及本地安全四个方面展开。下面给出可直接落地的做法与脚本示例。
一 身份认证与授权
var jsonData = pm.response.json();
pm.environment.set("myToken", jsonData.token || jsonData.access_token);
之后在请求头中使用 {{myToken}}。二 请求加密与签名
const CryptoJS = require("crypto-js");
function aesEncrypt(content, key, iv) {
const encrypted = CryptoJS.AES.encrypt(content, key, { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
}
const key = "Y5MUIOM7BUWI7BQR"; const iv = "S41AXIPFRFVJL73Z";
pm.environment.set("encUser", aesEncrypt("admin", key, iv));
请求体中使用 “username”:“{{encUser}}”。if (!pm.globals.has("forgeJS")) {
pm.sendRequest("https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js", (err, res) => {
if (!err) pm.globals.set("forgeJS", res.text());
});
}
eval(pm.globals.get("forgeJS"));
function rsaEncrypt(content, pubKeyPem) {
const pub = forge.pki.publicKeyFromPem(pubKeyPem);
return forge.util.encode64(pub.encrypt(content, 'RSAES-PKCS1-V1_5', { md: forge.md.sha1.create(), mgf: forge.mgf.mgf1.create(forge.md.sha1.create()) }));
}
pm.environment.set("encPwd", rsaEncrypt("P@ssw0rd", pm.globals.get("RSA_Public_Key")));
请求体中使用 “password”:“{{encPwd}}”。// 假设已引入 pmlib(含 KJUR.crypto.Signature),私钥存于环境变量 pri_key
eval(pm.globals.get('pmlib_code'));
const privkey = pm.environment.get('pri_key').replace(/\\n/g, "\n");
const dataToSign = pm.request.method + "\n" +
pm.request.url.getPathWithQuery() + "\n" +
pm.variables.replaceIn('{{$timestamp}}') + "\n" +
pm.variables.replaceIn('{{$randomUUID}}') + "\n" +
(pm.request.body?.raw || '');
const sig = new pmlib.rs.KJUR.crypto.Signature({alg: "SHA256withRSA"});
sig.init(privkey); sig.updateString(dataToSign);
const signB64 = pmlib.rs.hextob64(sig.sign());
pm.request.headers.add({ key: "Authorization", value: `SHA256-RSA nonce_str={{$randomUUID}},timestamp={{$timestamp}},signature=${signB64}` });
const phone = "18211101111", opt = "testfan", ts = new Date().getTime();
const sign = CryptoJS.MD5(phone + "your_salt" + ts).toString();
pm.environment.set("phone", phone); pm.environment.set("opt", opt);
pm.environment.set("timestamp", ts); pm.environment.set("sign", sign);
请求体:{ "phoneNum":"{{phone}}", "optCode":"{{opt}}", "timestamp":{{timestamp}}, "sign":"{{sign}}" }
三 敏感信息与本地安全
pm.environment.unset("tmp"))。四 快速落地清单