Проверка подписи
Перед обработкой проверяйте подлинность каждого webhook.
Заголовки
| Заголовок | Описание |
|---|---|
X-Webhook-Id | Уникальный идентификатор события. Используйте для защиты от повторной обработки. |
X-Webhook-Timestamp | Unix timestamp в секундах — время формирования webhook. |
X-Webhook-Signature-Version | Версия алгоритма подписи. Сейчас v1. |
X-Webhook-Signature | Подпись HMAC-SHA256 в формате v1=<signature>. |
Порядок проверки
- Получите raw body запроса.
- Прочитайте
X-Webhook-Timestamp,X-Webhook-Signature-VersionиX-Webhook-Signature. - Проверьте, что версия подписи —
v1. - Убедитесь, что timestamp отличается от текущего времени не больше чем на 5 минут в любую сторону.
- Сформируйте строку
timestamp.raw_body. - Рассчитайте HMAC-SHA256 с webhook secret.
- Сравните результат с
X-Webhook-Signatureчерез constant-time сравнение. - Обработайте JSON и сохраните
X-Webhook-Id. Если такой ID уже обработан, не выполняйте бизнес-логику повторно.
Если подпись не совпала
Webhook с неверной подписью нужно отклонить. Пример записи в логе: