HMAC签名与github中的x-hub-signature不匹配

我正在处理来自github的传入Webhook,并且想要validationx-hub-signature。 我使用hmac来散列“秘密”,然后比较这两个哈希值。 问题是他们从来不匹配。 这是我的设置:

 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。 我只是将其更改为应用程序/ JSON,然后它的工作!

如果webhook Content-Type被设置为application/x-www-url-encoded那么你需要用来检查HMAC的string是"payload=" + query_encoded_payload

例如在golang

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