Validar solicitações da HubSpot
Para garantir que as solicitações que sua integração esteja recebendo da HubSpot venham realmente da HubSpot, preenchemos dois cabeçalhos: X-HubSpot-Signature
e X-HubSpot-Signature-Version
.
O cabeçalho X-HubSpot-Signature
conterá a assinatura que precisará ser verificada. O método usado para verificar a assinatura dependerá da versão da assinatura.
O cabeçalho X-HubSpot-Signature-Version
conterá um número de versão, ou seja, v2
, que indicará qual método deve ser usado para verificar a assinatura incluída no X-HubSpot-Signature
.
Veja as páginas de documentação abaixo para obter detalhes sobre como verificar as diferentes versões da assinatura.
Validar a solicitação de solicitação v1:
Quando a solicitação da HubSpot for enviada com o cabeçalho X-HubSpot-Signature-Version
definido como v1
, o cabeçalho X-HubSpot-Signature
será um hash SHA-256 criado usando o segredo do cliente do seu aplicativo combinado com dados da solicitação.
Para verificar essa assinatura, execute as seguintes etapas:
- Crie uma cadeia que concatene o seguinte:
Segredo do cliente
+corpo da solicitação
(se presente) - Crie um hash SHA-256 da string resultante.
- Compare o valor do hash à assinatura.
- Se forem iguais, essa solicitação passou na validação.
- Se esses valores forem diferentes, essa solicitação pode ter sido alterada em trânsito ou alguém pode ter falsificado solicitações no seu endpoint.
Exemplo de uma solicitação com um corpo:
Exemplos de assinatura de solicitação v1:
O hash resultante seria:232db2615f3d666fe21a8ec971ac7b5402d33b9a925784df3ca654d05f4817de
Validando a solicitação de solicitação v2:
Quando a solicitação da HubSpot for enviada com o cabeçalho X-HubSpot-Signature-Version
definido como v2
, o cabeçalho X-HubSpot-Signature
será um hash SHA-256 criado usando o segredo do cliente do seu aplicativo combinado com dados da solicitação.
Para verificar essa assinatura, execute as seguintes etapas:
- Crie uma cadeia que concatene o seguinte:
Segredo do cliente
+método http
+URI
+corpo da solicitação
(se presente) - Crie um hash SHA-256 da string resultante.
- Compare o valor do hash à assinatura.
- Se forem iguais, essa solicitação passou na validação.
- Se esses valores forem diferentes, essa solicitação pode ter sido alterada em trânsito ou alguém pode ter falsificado solicitações no seu endpoint.
Observações:- a URI usada para construir a string de origem deve corresponder exatamente à solicitação original, incluindo o protocolo. Se você tiver problemas para validar a assinatura, verifique se todos os parâmetros de consulta estão na mesma ordem em que foram listados na solicitação original.
- A string de origem deve ser de codificado em UTF-8 antes de calcular o hash SHA-256.
Exemplo de uma solicitação GET:
Segredo do cliente
: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyMétodo HTTP
: GETURI
: https://www.example.com/webhook_uri
Exemplo de uma solicitação com um corpo:
Segredo do cliente
: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyMétodo HTTP:
POSTURI
: https://www.example.com/webhook_uriCorpo da solicitação
:{"example_field":"example_value"}
X-HubSpot-Signature-Version
definido como v3
, o cabeçalho X-HubSpot-Signature
será um hash SHA-256 criado usando o segredo do cliente do seu aplicativo combinado com dados da solicitação. Ela também conterá o cabeçalho X-HubSpot-Request-Timestamp
.- Rejeitar a solicitação se o registro de data/hora tiver mais de 5 minutos.
- Crie uma string codificada em utf-8 que concatene o seguinte:
requestMethod
+requestUri
+requestBody
+ timestamp. O registro de data e hora é fornecido pelo cabeçalhoX-HubSpot-Request-Timestamp
. - Crie um hash HMAC SHA-256 da string resultante usando o segredo do aplicativo como o segredo da função HMAC SHA-256.
- A Base64 codifica o resultado da função do HMAC.
- Compare o valor do hash à assinatura. Se forem iguais, a origem da solicitação foi confirmada como sendo da HubSpot. Recomendamos usar uma comparação de string de tempo constante para a proteção contra ataques de sincronização.
Thank you for your feedback, it means a lot to us.