मैं एक Webhook for GitHub कोडिंग कर रहा हूँ, और जैसा कि KOA.js
में सुरक्षित सत्यापन कार्यान्वित: pull_requests के लिएGithub धक्का घटना हस्ताक्षर से मेल नहीं
function sign(tok, blob) {
var hmac;
hmac = crypto
.createHmac('sha1', tok)
.update(blob)
.digest('hex');
return 'sha1=' + hmac;
}
...
key = this.request.headers['x-hub-signature'];
blob = JSON.stringify(this.request.body);
if (!key || !blob) {
this.status = 400;
this.body = 'Bad Request';
}
lock = sign(settings.api_secret, blob);
if (lock !== key) {
console.log(symbols.warning, 'Unauthorized');
this.status = 403;
this.body = 'Unauthorized';
return;
}
...
और घटनाओं बनाने यह ठीक है, नई शाखाएं भी धक्का काम करता है काम करता है, लेकिन धक्का के लिए घटनाओं को x-hub-signature
करता है और पेलोड से गणना हुई हैश मेल नहीं खाता है, इसलिए यह हमेशा 403 अनधिकृत हो जाता है।
अद्यतन
मैंने देखा है कि और धक्का पेलोड करता इस तरह के लिए head_commit पेलोड से जुड़ जाते हैं। मैंने शरीर से काम और head_commit को हटाने की कोशिश की है, लेकिन यह काम नहीं किया।
अद्यतन
अधिक जानकारी के लिए इन उदाहरण पेलोड की समीक्षा करें। मैंने परीक्षण रेपो और टोकन जानकारी के लिए यूआरएल भी शामिल किया है: https://gist.github.com/marcoslhc/ec581f1a5ccdd80f8b33
"बुरी तरह विफलता" का क्या अर्थ है? आपको क्या त्रुटि मिलती है? – Chris
'एक्स-हब-हस्ताक्षर' गणना की हैश के बराबर नहीं है। – marcoslhc
अंधेरे में कुल स्टैब, लेकिन क्या आप सुनिश्चित हैं कि 'this.request.body' पहले से ही एक स्ट्रिंग नहीं है? यदि ऐसा है, तो यह डबल-एन्कोड किया जाएगा (उदाहरण के लिए, तीन-वर्ण स्ट्रिंग 'foo' JSON को पांच-वर्ण स्ट्रिंग '" foo "' में एन्कोड किया जाएगा। देखें कि 'type.request.body' किस प्रकार का उत्पादन करता है। – apsillers