Definição
HMAC em webhooks é uma técnica de segurança que permite ao sistema que recebe uma notificação automática confirmar que ela foi enviada por quem diz ter enviado e que não foi alterada no caminho. Funciona combinando o conteúdo da mensagem com uma chave secreta compartilhada, gerando uma assinatura que o receptor recalcula e compara.
Também conhecido como: HMAC, Hash-based Message Authentication Code in webhooks, Assinatura HMAC de webhook, Validação de assinatura de webhook, HMAC-SHA256 em webhooks, Webhook assinado
O que significa HMAC?
HMAC é a sigla em inglês para código de autenticação de mensagem baseado em hash. É um método que pega duas coisas, o conteúdo de uma mensagem e uma chave secreta, e as passa por uma função de hash, como o SHA-256. O resultado é uma sequência de caracteres de tamanho fixo, que funciona como uma assinatura.
Se uma única letra da mensagem mudar, ou se a chave usada for diferente, a assinatura gerada será completamente outra. Por isso, quem conhece a chave consegue verificar se a mensagem é autêntica e está íntegra.
Para que serve o HMAC em webhooks?
Webhook é uma notificação que um sistema envia automaticamente para outro quando algo acontece. Em uma API fiscal, por exemplo, o emissor avisa o ERP do cliente que uma NF-e foi autorizada, que uma NFS-e foi rejeitada ou que um cancelamento foi concluído.
O problema é que o endereço que recebe essas notificações fica exposto na internet. Sem proteção, qualquer pessoa poderia enviar uma mensagem falsa dizendo que uma nota foi autorizada. O HMAC resolve isso: o sistema só aceita a notificação se a assinatura que veio junto bater com a que ele mesmo calcula usando a chave secreta.
Como funciona a validação da assinatura?
Antes de tudo, quem envia e quem recebe combinam uma chave secreta, que nunca trafega junto com as notificações. Quando um evento acontece, o remetente calcula o HMAC do corpo da mensagem com essa chave e envia o resultado em um cabeçalho HTTP da requisição.
Ao receber, o sistema do cliente pega o corpo exatamente como chegou, calcula o HMAC com a mesma chave e compara com o valor do cabeçalho. Se forem iguais, a mensagem é legítima e pode ser processada. Se forem diferentes, a notificação deve ser descartada e, de preferência, registrada em log para investigação.
Qual a diferença entre HMAC e assinatura digital?
A assinatura digital, como a usada no XML de uma NF-e, utiliza um par de chaves: uma privada, que assina, e uma pública, que qualquer pessoa pode usar para conferir. Ela prova a autoria perante terceiros e tem validade jurídica quando feita com certificado digital.
O HMAC usa uma única chave secreta, conhecida pelas duas partes. É mais simples e rápido, ideal para comunicação entre dois sistemas que confiam um no outro, mas não serve para provar a autoria para um terceiro, já que ambos os lados poderiam ter gerado a assinatura. Também é diferente de um hash simples, que não usa chave e, portanto, pode ser recalculado por qualquer um.
Quais cuidados tomar ao implementar HMAC em webhooks?
Calcule a assinatura sobre o corpo bruto da requisição, antes de convertê-lo em objeto JSON, pois reformatar espaços ou a ordem dos campos muda o resultado. Use uma função de comparação em tempo constante, disponível na maioria das linguagens, para evitar ataques que exploram o tempo de resposta.
Guarde a chave secreta em um cofre ou gerenciador de segredos, nunca no código-fonte, e troque-a periodicamente. Quando houver um carimbo de data e hora na mensagem, recuse notificações muito antigas para impedir que alguém reenvie uma mensagem verdadeira capturada antes. E mantenha o endpoint em HTTPS, já que o HMAC garante autenticidade, mas não esconde o conteúdo.
Exemplos de HMAC em webhooks
- Um ERP recebe um webhook informando que a NF-e de um pedido foi autorizada, recalcula o HMAC-SHA256 do corpo com a chave secreta configurada e, como o valor confere, atualiza o pedido para faturado e baixa o XML.
- Uma plataforma de vendas recebe uma notificação de cancelamento de NFC-e cuja assinatura não confere; o sistema descarta a mensagem, registra o incidente em log e consulta o status diretamente na API para confirmar a situação real.
- Um marketplace troca a chave secreta dos webhooks por política de segurança e, durante um período de transição, aceita assinaturas geradas com a chave antiga e com a nova até concluir a migração.
- Uma transportadora valida o HMAC das notificações de autorização de CT-e e MDF-e antes de liberar a viagem no seu software de gestão.
Perguntas frequentes
O HMAC criptografa o conteúdo do webhook?
Não. O HMAC apenas comprova quem enviou e que a mensagem não foi alterada. O conteúdo continua legível; para protegê-lo durante o envio, o endpoint deve usar HTTPS.
Onde a assinatura HMAC costuma ser enviada?
Normalmente em um cabeçalho HTTP da própria requisição do webhook. O nome exato do cabeçalho e o algoritmo usado são definidos na documentação de cada API.
O que fazer se a chave secreta vazar?
Gere uma nova chave imediatamente, atualize-a no sistema receptor e invalide a antiga. Depois, revise os logs para identificar notificações suspeitas recebidas durante o período de exposição.
Validar o HMAC dispensa consultar o status do documento?
Na maioria dos casos, sim, pois a mensagem é confiável. Ainda assim, consultar o status pela API é uma boa prática em operações críticas ou quando a notificação parecer inconsistente.
Atualizado em · Como produzimos este glossário
