Skip to main content
Valide X-Webhook-Signature antes de aplicar efeitos colaterais no seu sistema.

Como a assinatura é gerada

  • Algoritmo: HMAC-SHA256.
  • Chave: o secret do webhook (whsec_...), retornado em Criar webhook e nas leituras.
  • Mensagem: os bytes exatos do corpo do POST.
  • Header X-Webhook-Signature: sha256=<hex>, com o digest em hexadecimal minúsculo.
Não há timestamp nem nonce na assinatura: ela cobre somente o corpo. O id da entrega no envelope serve para deduplicar.
Parsear e reserializar o JSON altera o corpo e quebra a comparação. Na rota do webhook use o corpo bruto (por exemplo express.raw({ type: '*/*' })), nunca express.json().

Node.js SDK

O SDK compara em tempo constante e aceita Buffer ou string:
Node.js SDK
validateSignature(rawBody, header, secret) retorna false se o header ou o secret estiverem ausentes.

Sem o SDK

Compare sempre em tempo constante (timingSafeEqual) e rejeite a entrega se a assinatura não bater.

Headers da entrega

Os headers customizados do webhook entram por último e sobrescrevem headers de mesmo nome. Se você usa um header próprio para autenticar sua rota, escolha um nome diferente dos acima.

Evitar processamento duplicado

Use o id da entrega antes de qualquer efeito colateral. Um reprocessamento reaproveita o mesmo id.

Checklist

Voltar para Webhooks