【问题标题】:How to use SHA-1 dynamic key in Postman如何在 Postman 中使用 SHA-1 动态密钥
【发布时间】:2016-09-16 23:16:17
【问题描述】:

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

我会使用预请求脚本来实现这一点。

谢谢。

【问题讨论】:

    标签: javascript security sha postman


    【解决方案1】:

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

    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);

    然后我只需要在 URL 中设置参数: {{baseUrl}}/get?client_id={{client_id}}&account_id={{account_id}}&mac={{mac}}

    其中 {{baseUrl}} 是环境变量 和 {{client_id}}、{{account_id}} 是全局变量

    希望它对某人有所帮助。

    谢谢。

    【讨论】:

    • 正是我想要的。谢谢! :)
    【解决方案2】:

    this answer 的启发,我使用以下 Postman 预请求脚本来创建请求的 SHA1 哈希。

    注意request.data 是一个隐含变量,CryptoJS 库由Postman Sandbox for pre-request scripts 提供。

    const hash = CryptoJS.HmacSHA1(request.data, 'yourSecret').toString();
    pm.globals.set('hash', hash);
    

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


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

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

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

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

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

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

    【讨论】:

    • 值得对其他选择这个的人说,如果你最终将“对象”这个词传递给你的 API,那么你需要在 const 行的末尾添加 .toString()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2017-08-05
    • 2011-05-30
    相关资源
    最近更新 更多