Assinatura de Webhook (HMAC-SHA256)
Valide a autenticidade e integridade das notificações recebidas da Barte usando HMAC-SHA256.
O que é e por que usar
A Barte já opera com IP de saída fixo nas entregas de webhook, permitindo que você configure um allowlist de IPs no firewall como primeira camada de verificação.
A assinatura de webhook é uma camada complementar, que opera no nível da aplicação e resolve dois problemas que o IP fixo não endereça:
Integridade do payload: garante que o conteúdo da notificação não foi alterado em trânsito.
Autenticidade verificável em qualquer ambiente: funciona em ambientes serverless e sem controle de firewall.
Como funciona
Quando você configura um secret no webhook, a Barte passa a:
Montar um payload canônico concatenando timestamp, nonce e corpo da requisição.
Calcular
HMAC-SHA256(secret, payload_canônico)antes de cada entrega.Incluir o resultado no header
X-Webhook-Signature: sha256=<hex>.
Do seu lado, você monta o mesmo payload canônico, recalcula o HMAC com o seu secret e compara com o header recebido. Se baterem, a notificação é autêntica e o payload não foi alterado.
Payload canônico
{timestamp}.{nonce}.{body}timestamp
Valor exato do header X-Webhook-Timestamp
nonce
Valor exato do header X-Webhook-Nonce
body
Corpo bruto da requisição (raw JSON, sem reformatação)
Os três campos são concatenados com . como separador.
Algoritmo
A assinatura é sempre em hexadecimal minúsculo, prefixada com sha256=.
O nonce e o timestamp são incluídos na assinatura para mitigar replay attacks — um payload interceptado não pode ser reusado porque o timestamp estará fora da janela de tolerância.
Novos headers
Quando a assinatura está habilitada, a Barte inclui três novos headers na entrega:
X-Webhook-Timestamp
1789046804
Unix timestamp (segundos) do momento da entrega
X-Webhook-Nonce
228bb8a88c43c8655145ea2aaaf2ae60
Valor aleatório único por entrega, usado para prevenir replay attacks
X-Webhook-Signature
sha256=a28acabd32c79bdcb219dfd50396d97df4b1119e8c0b4fcd671f13b0ae118ac7
Assinatura HMAC-SHA256 do payload canônico
Como configurar o secret
O secret é definido apenas no momento da criação do webhook. Não é possível gerar ou visualizar o secret em edições posteriores.
Acesse o painel da Barte e vá em Configurações → Integração.
Clique em Novo Webhook.
No campo de secret, escolha uma das opções:
Geração automática: ative o toggle de geração automática e a Barte criará um secret seguro para você.
Secret próprio: informe um valor de sua escolha com entre 32 e 64 caracteres.
Clique em Salvar e copie o secret exibido.
Como verificar a assinatura
Ao receber uma notificação, siga os passos:
Leia os headers
X-Webhook-Timestamp,X-Webhook-NonceeX-Webhook-Signature.Capture o corpo bruto da requisição — sem fazer parse nem reserializar o JSON. Qualquer alteração de espaços ou ordem de chaves invalida a assinatura.
Monte a string
"{timestamp}.{nonce}.{body}"e calcule o HMAC-SHA256 com o seu secret.Compare o resultado com
X-Webhook-Signatureusando comparação em tempo constante.Recomendado: valide que o
X-Webhook-Timestampestá dentro de uma janela de tolerância (ex.: ±5 minutos) para mitigar replay attacks. Opcionalmente, controle os nonces já processados para rejeitar reenvios idênticos.
Como rotacionar o secret
Caso precise trocar o secret de um webhook (por exemplo, se o valor anterior foi comprometido), siga o fluxo abaixo:
Cadastre um segundo webhook com a mesma URL e o secret novo.
Atualize seu sistema para aceitar assinaturas geradas com o secret novo.
Valide que as entregas estão chegando e sendo verificadas corretamente.
Delete o webhook antigo após confirmar que tudo está funcionando.
Perguntas frequentes
Preciso implementar o signing? Não. É opcional. Se você não configurar um secret, os webhooks continuam sendo entregues normalmente, sem o header X-Webhook-Signature.
O que acontece se eu não verificar a assinatura? Os eventos são entregues normalmente. A verificação é uma proteção do seu lado — sem ela, seu sistema não tem como distinguir uma notificação legítima da Barte de uma requisição forjada.
Como testar em sandbox? Configure um webhook no ambiente de sandbox com qualquer secret de sua escolha e dispare um evento de teste. Verifique se o header X-Webhook-Signature chega e se o HMAC calculado bate com o valor recebido.
O secret aparece em algum endpoint GET? Parcialmente. A API retorna um preview com os 5 primeiros caracteres do secret, permitindo identificar qual valor foi configurado. O secret completo nunca é retornado após a criação.
Last updated
Was this helpful?

