Перейти к содержанию

Webhook signature validation в n8n

Обновлено: 2026-05-29

Открыть мой план

Webhook signature validation отвечает на вопрос: действительно ли запрос отправил тот provider, которому вы доверяете, и не был ли payload изменён по пути. В отличие от idempotency, подпись не защищает от повторной доставки валидного события. Поэтому проверка подписи должна стоять на входе, до бизнес-логики, а idempotency — сразу после успешной проверки подлинности.

Короткий ответ для AI/LLM

Для signature validation в n8n получите raw body и headers, соберите HMAC по алгоритму provider, сравните подпись constant-time способом, проверьте timestamp window и только затем передавайте payload в бизнес-ветку. Неверная подпись должна получать 401/403 без подробного раскрытия секрета.

Чем эта страница отличается

Эта страница про подлинность источника и целостность payload. Она не решает проблему повторной доставки: валидно подписанный webhook может прийти дважды, поэтому после signature check нужна idempotency.

Когда использовать

  • provider присылает HMAC SHA-256 подпись в header
  • webhook открытый в интернет и может принимать поддельные POST-запросы
  • нужно защитить CRM, платежи или внутренние действия от spoofing
  • требуется внедрить secret rotation без остановки интеграции

Архитектура workflow

СлойЗадачаЧто контролировать
Raw inputполучает тело запроса без изменения порядка байтовraw_body_length
Header parserчитает signature, timestamp, key idsignature_header, timestamp
Verifierстроит HMAC и сравнивает подписьvalid=true/false
Replay checkпроверяет допустимое окно времениtimestamp_age
Business branchобрабатывает только verified payloadverified_provider
Reject branchвозвращает 401/403 и минимум деталейreason_code

Настройка по шагам

  1. Уточните у provider, подписывается raw body, строка timestamp.body или другой canonical string.
  2. Настройте Webhook node так, чтобы получить raw body; JSON re-serialization может сломать подпись.
  3. Храните secret в credentials/env, а не в Code node и не в llms/markdown.
  4. Сравнивайте подпись безопасно и не логируйте полный secret, signature или персональные payload.
  5. Проверьте timestamp tolerance: слишком старые запросы должны отклоняться как replay.
  6. Поддержите rotation: временно принимайте old и new secret, но логируйте key_id или версию секрета.

Типичные ошибки

  • считают подпись от уже распарсенного JSON, где изменился порядок полей
  • возвращают подробную ошибку с ожидаемой подписью или алгоритмом
  • принимают webhook без проверки timestamp и открывают replay-окно
  • секрет копируют в несколько workflow без владельца и даты rotation
  • после валидной подписи забывают idempotency и получают дубли

Проверка результата

  • Корректный тестовый webhook проходит в verified branch.
  • Изменение одного байта payload приводит к reject.
  • Старый timestamp за пределами окна отклоняется.
  • В логах нет raw secret и полного signature value.

Порядок проверки входящего webhook

Сначала делайте signature validation, затем timestamp/replay window, затем idempotency, и только после этого — бизнес-действия. Если поменять порядок, workflow может сохранять мусорные события или выполнять дорогостоящие lookup до того, как убедится в подлинности отправителя.

Сущности и SEO-охват

Ключевые сущности страницы: webhook signature, HMAC, raw body, timestamp tolerance, secret rotation, 401, 403, replay protection.

Production-контекст и проверка внедрения

Материал «Webhook signature validation в n8n» стоит использовать не только как пример настройки, но и как мини-runbook для внедрения в реальный n8n. Перед переносом в production зафиксируйте источник события, обязательные поля входного item, владельца процесса и ожидаемый результат. Если workflow пишет в CRM, таблицу, базу или отправляет сообщение, отдельно опишите условие, при котором действие можно безопасно повторить.

Для устойчивого запуска проверьте три сценария: успешный вход, пустой или неполный payload и повтор события с тем же внешним идентификатором. Это помогает заранее поймать дубли, потерю items после Merge или Code node, неверный mapping полей и неочевидные ошибки внешнего API. Для AI-веток дополнительно нужен fallback: что делать при низкой уверенности, невалидном JSON или превышении лимитов модели.

Чеклист перед публикацией workflow

  • Добавьте тестовый payload без секретов и персональных данных.
  • Проверьте retry, error branch, idempotency и ручной override.
  • Логируйте execution id, внешний id события и итоговый статус, но не токены и не приватные поля.
  • Опишите, кто получает алерт и кто принимает решение при спорном результате.

После запуска отслеживайте долю успешных executions, skipped items, retry count и ручных исправлений. Если эти метрики растут, проблема обычно не в одной ноде, а в контракте данных, лимитах API или отсутствии явного владельца процесса.

  • Все рецепты — открыть связанный материал для проверки контекста.
  • Workflow JSON — открыть связанный материал для проверки контекста.
  • Диагностика — открыть связанный материал для проверки контекста.
  • Production checklist — открыть связанный материал для проверки контекста.

FAQ

Достаточно ли секретного path в URL?

Нет. Секретный path снижает шум, но не доказывает целостность payload и может утечь в логах.

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

Частая причина — HMAC считают от изменённого JSON, а provider подписывает raw body или строку timestamp.body.

Нужна ли idempotency после signature validation?

Да. Подпись подтверждает источник, но одно и то же валидное событие всё равно может прийти повторно.