che sto codifica di un Webhook for GitHub, e implementato verifica sicuro KOA.js
come:Github firma evento spinta non corrispondono
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;
}
...
per pull_requests e creare eventi questo funziona bene, anche spingendo nuove filiali Works, ma per il push commette eventi, lo x-hub-signature
e l'hash calcolato dal payload non corrispondono, quindi ottengono sempre 403 non autorizzati.
Aggiornamento
ho notato che per questo tipo di payload spingere le commette e head_commit sono aggiunti al carico utile. Ho provato a rimuovere commit e head_commit dal corpo ma non ha funzionato.
Aggiornamento
Per ulteriori informazioni si prega di consultare questi esempi carichi utili. Ho anche incluso URL per il repo di prova e le informazioni token: https://gist.github.com/marcoslhc/ec581f1a5ccdd80f8b33
Che cosa significa "fallisce miseramente"? Che errore (i) ottieni? – Chris
La 'x-hub-signature' non è uguale all'hash calcolato. – marcoslhc
Una pugnalata totale al buio, ma sei sicuro che 'this.request.body' non sia già una stringa? Se lo è, sarà codificato a due (ad esempio, la stringa di tre caratteri 'foo' sarà codificata JSON nella stringa di cinque caratteri' "foo" '). Guarda cosa produce 'typeof this.request.body'. – apsillers