Segurança de Webhook

Segurança de Webhook

Protegendo as requisições

Será preciso uma URL pública acessível para que as nossas requisições de webhook sejam disparadas.

Autenticação básica HTTP

A autenticação básica, ou em inglês basic authentication é um esquema de autenticação simples incorporado no protocolo HTTP. Recomendamos que você utilize em seus endpoints. Você pode configurar a URL do seu webhook passando usuário e senha através da URL. Exemplo: https://usuario:[email protected]/webhookd4sign.

Poderá, também, utilizar TOKENS únicos para acesso a sua URL. Exemplo: https://www.suaurl.com/webhookd4sign/TOKEN_SHA256

Requisições HTTPS

Utilize sempre endpoints HTTPS

HMAC

Introdução ao HMAC

Em criptografia, um HMAC é um tipo específico de código de autenticação de mensagem que envolve uma função hash criptográfica e uma chave criptográfica secreta. Como em qualquer MAC, ele pode ser usado para verificar simultaneamente a integridade dos dados e a autenticidade de uma mensagem.

A cada disparado de webhook, calculamos o Hash SHA256 do UUID do documento com o secret key e adicionamos essa informação ao cabeçalho.

Exemplo:
Content-Hmac: sha256=a683af9ffda69010bde886fc0e30ca8c257baf5f19ec875a1e0e36ddd92da944.

Você deverá fazer o mesmo cálculo de Hash para verificar se a requisição veio da D4Sign e, também, que os dados não foram comprometidos. Calcule o Hash SHA256 do UUID do documento juntamente com a secret key já conhecida. O valor deve ser igual ao enviado no cabeçalho da requisição.

🚧

Para ativar a sua secret key, acesse a sua área de API e clique em "Gerar Secret Key MAC".

Ferramentas para validar HMAC

https://www.freeformatter.com/hmac-generator.html

https://codebeautify.org/hmac-generator

https://www.liavaag.org/English/SHA-Generator/HMAC

Utilize essas ferramentas informando o UUID do documento e a secret key da sua conta. O resultado deverá ser o valor recebido no cabeçalho da requisição.

Mais referências sobre HMAC

RFC 2104 - IETF

Wikipédia

Stack Overflow

PHP


Did this page help you?