Я кодирую Webhook для GitHub и реализовал безопасную проверку в KOA.js
как:
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;
}
...
для pull_requests и создания событий, это работает нормально, даже нажатие новых ветвей работает, но для push совершает события x-hub-signature
, а вычисленный хэш из полезной нагрузки не соответствует, поэтому он всегда получает 403 неавторизованных.
Обновление
Я заметил, что для такого рода push-полезных нагрузок коммиты и head_commit добавляются в полезную нагрузку. Я попытался удалить коммиты и head_commit из тела, но это не сработало.
Обновление
Для получения дополнительной информации ознакомьтесь с этими примерами полезных нагрузок. Я также включил URL для тестового репо и токенов: https://gist.github.com/marcoslhc/ec581f1a5ccdd80f8b33