如何在Postman中使用SHA-1动态密钥

Boo*_*man 4 javascript security sha postman

我正在尝试使用Postman发送一个GET http请求,其中包含一个参数,该参数是通过获取完整的请求查询字符串(在URL编码后,URL中问号右侧的所有内容)动态生成的,连接先前分配的共享密钥,然后执行生成的字符串的SHA-1哈希.

我会使用预请求脚本来实现这一目标.

谢谢.

Boo*_*man 8

我实际上找到了一个解决方案,并想分享它.

var params = [
    ["client_id", "222"]
    ,["account_id", ""]
];

// Build the request body string from the Postman request.data object
var requestBody = "";
var firstpass = true;
for(var i=0;i < params.length; i++) {
        if(!firstpass){
            requestBody += "&";
        }
        requestBody += params[i][0] + "=" + params[i][1];
        firstpass = false;
        postman.setGlobalVariable(params[i][0], params[i][1]);
}
requestBody += postman.getEnvironmentVariable("sharedSecretKey");
postman.setGlobalVariable("requestBody", requestBody);

var mac = "";
if(requestBody){
    // SHA1 hash
    mac = CryptoJS.SHA1(requestBody);
}

postman.setGlobalVariable("mac", mac);
Run Code Online (Sandbox Code Playgroud)

然后,我只需要设置的URL的参数:{{的baseUrl}} /获取的client_id = {{CLIENT_ID}}&ACCOUNT_ID = {{ACCOUNT_ID}}&MAC = {{MAC}}

其中{{baseUrl}}是一个环境变量而{{client_id}},{{account_id}}是全局变量

希望它对某人有所帮助.

谢谢.


Dou*_*ers 5

受此答案的启发,我使用以下 Postman 预请求脚本来创建请求的 SHA1 哈希。

请注意,这request.data是一个隐含变量,该CryptoJS库由Postman Sandbox 提供用于预请求脚本

const hash = CryptoJS.HmacSHA1(request.data, 'yourSecret');
pm.globals.set('hash', hash);
Run Code Online (Sandbox Code Playgroud)

您现在可以使用{{hash}}语法将哈希值作为邮递员全局变量引用。


创建 X-Hub-Signature 标头,如 GitHub API Webhook 请求

我这样做的目的是模拟GitHub Webhooks APIX-Hub-Signature提供的标头,因为我的 Web 服务会验证所有 Webhook 有效负载以匹配签名。所以为了测试我的网络服务,我还需要邮递员来生成一个有效的签名标头。

这是上述代码片段的改编版,用于生成X-Hub-Signature请求标头值。

  1. 在 GitHub 中,我为我的GitHub App设置了一个webhook 密码

github webhook 秘密

  1. 在 Postman 中,我创建了一个环境,GITHUB_WEBHOOK_SECRET使用我在创建 GitHub 应用程序时指定的值添加了 key=value 对。

邮递员环境变量

  1. 在 Postman 中,我使用了以下预请求脚本。它将计算出的散列设置为全局变量。
const hash = CryptoJS.HmacSHA1(
    request.data,
    pm.environment.get('GITHUB_WEBHOOK_SECRET')
);
pm.globals.set('X-HUB-SIGNATURE', 'sha1=' + hash);
Run Code Online (Sandbox Code Playgroud)
  1. 在 Postman 中,我将全局哈希变量作为请求中的标头引用,就像 GitHub Webhooks API 一样。

邮递员请求头