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