Ich bin Codierung eine Webhook for GitHub und implementiert eine sichere Überprüfung in KOA.js
als:Github Push Ereignissignatur nicht übereinstimmen
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;
}
...
für pull_requests und schaffen Ereignisse dies funktioniert ok, auch drängen neue Filialen arbeitet, aber für Push-Commits Ereignisse die x-hub-signature
und der berechnete Hash aus der Nutzlast nicht übereinstimmen, so wird es immer 403 nicht autorisiert.
aktualisiert
Ich habe für diese Art von Push-Nutzlasten der Commits und head_commit zugesetzt werden, um die Nutzlast bemerkt. Ich habe versucht, die commits und die head_commit aus dem Körper zu entfernen, aber es hat nicht funktioniert.
aktualisieren
Weitere Informationen finden Sie diese zB Nutzlasten überprüfen. Ich habe auch URL für die Test-Repo-und Token-Info enthalten: https://gist.github.com/marcoslhc/ec581f1a5ccdd80f8b33
Was bedeutet "kläglich"? Welche Fehler bekommen Sie? – Chris
Die 'x-Hub-Signatur' ist nicht gleich dem berechneten Hash. – marcoslhc
Ein totaler Stich im Dunkeln, aber bist du dir sicher, dass "this.request.body" nicht schon eine Zeichenfolge ist? Wenn dies der Fall ist, wird es doppelt codiert (z. B. wird die aus drei Zeichen bestehende Zeichenfolge "foo" JSON-codiert in die aus fünf Zeichen bestehende Zeichenfolge "foo"). Sehen Sie, was 'typeof.request.body' erzeugt. – apsillers