2 回答

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊
這是我在 Pre-Script 中使用的代碼。它適用于任何查詢 GET、PUT、POST、DELETE。
您需要更改 AppId 和 APIKey 值,并在最后一行調(diào)整環(huán)境變量“hmacKey”的名稱。
function interpolate (value) {
const {Property} = require('postman-collection');
return Property.replaceSubstitutions(value, pm.variables.toObject());
}
var uuid = require('uuid');
var moment = require("moment")
var hmacPrefix = "hmac";
var AppId = "4d53bce03ec34c0a911182d4c228ee6c";
var APIKey = "A93reRTUJHsCuQSHR+L3GxqOJyDmQpCgps102ciuabc=";
var requestURI = encodeURIComponent(pm.environment.values.substitute(pm.request.url, null, false).toString().toLowerCase());
var requestMethod = pm.request.method;
var requestTimeStamp = moment(new Date().toUTCString()).valueOf() / 1000;
var nonce = uuid.v4();
var requestContentBase64String = "";
var bodyString = interpolate(pm.request.body.toString());
if (bodyString) {
var md5 = CryptoJS.MD5(bodyString);
requestContentBase64String = CryptoJS.enc.Base64.stringify(md5);
}
var signatureRawData = AppId + requestMethod + requestURI + requestTimeStamp + nonce + requestContentBase64String; //check
var signature = CryptoJS.enc.Utf8.parse(signatureRawData);
var secretByteArray = CryptoJS.enc.Base64.parse(APIKey);
var signatureBytes = CryptoJS.HmacSHA256(signature,secretByteArray);
var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);
var hmacKey = hmacPrefix + " " + AppId + ":" + requestSignatureBase64String + ":" + nonce + ":" + requestTimeStamp;
postman.setEnvironmentVariable("hmacKey", hmacKey);

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
它實際上與 Postman 提供的所有事物的可變占位符有關(guān)。在測試占位符 {{$timestamp}} 的面值時傳遞了一個有效值。當(dāng)我剝離簽名以僅從一個段開始時,我成功地進(jìn)行了身份驗證。當(dāng)然,直到我把時間戳占位符放回去。
當(dāng)我將占位符換成標(biāo)題中傳遞的實際值時,它工作正常。我只能得出結(jié)論,一定有一些我看不到的額外字符。也許在郵遞員方面創(chuàng)建簽名時。該問題擴(kuò)展到其他占位符,例如 {{$guid}}。
- 2 回答
- 0 關(guān)注
- 338 瀏覽
添加回答
舉報