На главную

Шифрование и ключи

Подписи вебхуков

Считает и проверяет подпись по правилам GitHub, Stripe, Slack, Shopify и Telegram.

HMAC-SHA256 от тела запроса, ключ — секрет вебхука.

Байт в байт, как пришло: лишний перенос строки ломает подпись.

Заголовок с подписью

Заполните секрет и тело

Подпись считается в браузере через Web Crypto

Проверить чужую подпись

Сравнение идёт за постоянное время: так проверяют подписи на сервере, чтобы по скорости ответа нельзя было подобрать подпись побайтово.

Почему подпись «не сходится»

  • Тело прочитано после разбора JSON и собрано заново — порядок ключей и пробелы уже другие. Подписывать надо сырую строку запроса.
  • Фреймворк дописал перевод строки в конец или обрезал его.
  • Взят не тот секрет: у Stripe свой на каждый эндпоинт, у GitHub — на каждый вебхук.
  • Для Slack и Stripe в подпись входит время. Старые метки надо отклонять: это защита от повторной отправки перехваченного запроса.