Skip to main content
Todas as notificações de webhook disparadas pela KavroPay incluem uma assinatura criptográfica HMAC-SHA256 para garantir que a requisição partiu legitimamente dos servidores da KavroPay e que o payload não foi interceptado ou adulterado.

Estrutura dos Cabeçalhos

A assinatura é transmitida no cabeçalho X-KavroPay-Signature (e paralelamente em X-Kavro-Signature e x-kavropay-signature para retrocompatibilidade) no seguinte padrão:
Onde:
  • t: Timestamp Unix em segundos no momento exato do disparo.
  • v1: Hash hexadecimal HMAC-SHA256 gerado a partir do payload bruto.
Segredo Criptográfico (whsec_...): Todos os segredos de webhook utilizam 32 bytes de entropia aleatória com prefixo whsec_ (ex: whsec_3f8a...). Na criação de cobranças com notification_url, o segredo exclusivo daquela transação é retornado no campo notification_secret. Para webhooks cadastrados, consulte via GET /v1/webhooks/:id/secret.
Suporte a Rotação de Chaves (Dual-Signature): Durante a rotação de segredo (POST /v1/webhooks/:id/rotate-secret), a KavroPay suporta uma janela de transição de 24 horas onde envia múltiplos hashes v1 no cabeçalho: t=...,v1={hash_novo},v1={hash_antigo}. Seu código deve validar se qualquer uma das assinaturas v1 corresponde à sua chave.

Como a Assinatura é Calculada

  1. Extraia o timestamp t e o hash v1 do cabeçalho X-Kavro-Signature (ou utilize o cabeçalho X-Kavro-Timestamp).
  2. Concatene o timestamp com o corpo bruto da requisição (raw body, em formato string/bytes, sem alteração de formatação), separado por um ponto: payloadToSign=timestamp+"."+rawBody\text{payloadToSign} = \text{timestamp} + "." + \text{rawBody}
  3. Calcule o hash HMAC com algoritmo SHA-256 utilizando o segredo do webhook (signingSecret) cadastrado no painel da KavroPay.
  4. Compare o hash calculado com o valor v1 utilizando comparação segura em tempo constante (timing-safe comparison).
  5. Valide se a diferença entre o timestamp do webhook e o relógio atual do seu servidor não ultrapassa 300 segundos (5 minutos) para evitar ataques de repetição (replay attacks).

Exemplos Práticos de Implementação