Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HMAC签名不';t匹配来自github的x-hub签名_Javascript_Node.js_Cryptography_Webhooks_Hmac - Fatal编程技术网

Javascript HMAC签名不';t匹配来自github的x-hub签名

Javascript HMAC签名不';t匹配来自github的x-hub签名,javascript,node.js,cryptography,webhooks,hmac,Javascript,Node.js,Cryptography,Webhooks,Hmac,我正在处理从github传入的Webhook,并希望验证x-hub签名。我使用hmac对“secret”进行散列,然后比较两个散列。问题是他们从不匹配。这是我的设置: router.route("/auth") .post((req, res) => { var hmac = crypto.createHmac("sha1", process.env.WEBHOOK_SECRET); var calculatedSignature = "sha1=" + hmac.up

我正在处理从github传入的Webhook,并希望验证x-hub签名。我使用
hmac
对“secret”进行散列,然后比较两个散列。问题是他们从不匹配。这是我的设置:

router.route("/auth")

.post((req, res) => {

    var hmac = crypto.createHmac("sha1", process.env.WEBHOOK_SECRET);
    var calculatedSignature = "sha1=" + hmac.update(JSON.stringify(req.body)).digest("hex");
    console.log(req.headers["x-hub-signature"] === calculatedSignature); // Returns false
    console.log(req.headers["x-hub-signature"]) // => sha1=blablabla
    console.log(calculatedSignature) // => sha1=foofoofoo

    res.end();
});

我什么都试过了,但没法成功。想知道
hmac.update()
是否应该包含另一个参数,而不是
JSON.stringify(req.body)
。有人知道为什么它们不匹配吗?

所以问题在于webhook的设置。内容格式设置为application/x-www-form-urlencoded,出于某种原因,它对x-hub-signature进行了不同的散列。我刚把它改成application/json,然后它就工作了

如果webhook内容类型设置为
application/x-www-url-encoded
,则需要使用该字符串检查HMAC是否正确
“payload=“+query\u encoded\u payload

例如在戈兰

payloadForm := r.PostFormValue("payload")
escaped := url.QueryEscape(payloadForm) # ex. http://www.url-encode-decode.com/
checkMe := "payload=" + escaped

您是从哪里更改内容格式的?我找不到任何方法来设置这个webhook的设置。这对我很有效!非常感谢@snl您可以在github.com上的存储库设置webhooks下更改内容格式。