Сообщение «Недопустимая подпись» для запроса AppCenter Webhook - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь написать прокси-сервис между GitHub API и AppCenter API, и когда я пытаюсь перенаправить стандартное сообщение GitHub API, я получаю ответ «Подпись недействительна».Вот что я пытаюсь отправить:

{
"ref": "refs/heads/xxxx",
"before": "xxxxxxxxxxxxx",
"after": "xxxxxxxxxxxxx",
"created": false,
"deleted": false,
"forced": false,
"base_ref": null,
"compare": "https://github.com/xxxxx",
"commits": [{
    "content": "xxxx"
}],
"head_commit": {
    "content": "xxxx"
},
"repository": {
    "content": "xxxx"
},
"pusher": {
    "content": "xxxx"
},
"organization": {
    "content": "xxxx"
},
"sender": {
    "content": "xxxx"
}

}

Конечная точка AppCenter:

https://api.appcenter.ms/v0.1/public/apps/xxxxxxxxxxx/hooks

Заголовки запроса:

{
    "content-type": "application/json",
    "User-Agent": "GitHub-Hookshot/xxxxxxxx",
    "X-GitHub-Delivery": "xxxxxxxxxxxxxx",
    "X-GitHub-Event": "push",
    "X-Hub-Signature": "sha1=xxxxxxxxxxx"
}

Вот ответ, который я получаю:

{
    "id": "xxxxxxxxxxxxxxxx",
    "message": "Signature is invalid"
}

Я еще не получил разумного ответа от AppCenter, надеюсь, кто-то уже имел подобный опыт и может ответить.Спасибо

1 Ответ

0 голосов
/ 03 марта 2019

Я думаю, что проблема заключается в значении X-Hub-Signature.Начиная с Проверка полезных нагрузок от Github , Github использует HMAC SHA1 между данными полезной нагрузки и секретной строкой, которую вы поместили в раздел webhook вашего хранилища:

enter image description here

Формат подписи (без скобок):

sha1={HMAC-SHA1(secret, payload)}

Несколько примеров вычисления подписи:

  • с использованием ruby ​​(из * 1018)* здесь ):

    signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), ENV['SECRET_TOKEN'], payload_body)
    
  • с использованием JavaScript (от здесь ):

    var signature = 'sha1=' + CryptoJS.HmacSHA1(payload, environment.secret).toString(CryptoJS.enc.Hex)
    
...