2017-03-14 15 views
2

githubから受信Webhookを処理していて、x-hub-signatureを確認したいと思います。私はhmacを使って「秘密」をハッシュし、2つのハッシュを比較します。問題は、決して一致しないことです。これは私のセットアップです:HMAC署名がgithubのx-hub-signatureと一致しません

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)以外のパラメータを保持する必要があるかどうかを知りたいなぜ彼らは一致しないのか誰にも分かりますか?

答えて

0

ウェブフックの設定に問題がありました。 content-formatはapplication/x-www-form-urlencodedに設定されました。これは何らかの理由でx-hub-signatureを別にハッシュしました。私はapplication/jsonに変更してから、うまくいきました!

0

webhook Content-Typeがapplication/x-www-url-encodedに設定されている場合、HMACを確認するために使用する文字列は "payload=" + query_encoded_payloadです。 golang、例えば

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