Saltar al contenido principal
Para asegurarte de que las solicitudes que recibe tu integración realmente provienen de HubSpot, la solicitud incluye varios encabezados. Puedes usar estos encabezados, junto con los campos de la solicitud entrante, para verificar la firma de la solicitud. El método utilizado para verificar la firma depende de la versión de la firma:
  • Para validar una solicitud usando la última versión de la firma de HubSpot, usa el encabezado X-HubSpot-Signature-V3 y sigue las instrucciones asociadas para validar la versión v3 de la firma.
  • Para la compatibilidad con versiones anteriores, las solicitudes de HubSpot también incluyen versiones anteriores de la firma. Para validar una versión anterior de la firma, verifica el encabezado X-HubSpot-Signature-Version, y luego sigue las instrucciones asociadas que aparecen abajo según si la versión es v1 o v2.
En las siguientes instrucciones, encuentra más información sobre cómo obtener un valor del hash del secreto del cliente de tu aplicación y los campos de una solicitud entrante. Una vez que calcules el valor del hash, compáralo con la firma. Si los dos son iguales, entonces la solicitud pasó la validación. De lo contrario, la solicitud puede haber sido manipulada en el tránsito o alguien puede estar falsificando solicitudes en tu endpoint.

Validar solicitudes usando la firma de solicitud v1

Si tu aplicación está suscrita a eventos de objetos del CRM a través de la API de webhooks, las solicitudes de HubSpot se enviarán con el encabezado X-HubSpot-Signature-Version definido como v1. El encabezado X-HubSpot-Signature será un hash SHA-256 creado usando el secreto del cliente de tu aplicación junto con detalles de la solicitud. Para verificar esta versión de la firma, realiza los siguientes pasos:
  • Crea una cadena que concatene lo siguiente: Client secret + request body (si está presente).
  • Crea un hash SHA-256 de la cadena resultante.
  • Compara el valor del hash con el valor del encabezado X-HubSpot-Signature:
    • Si son iguales, esta solicitud ha superado la validación.
    • Si estos valores no coinciden, es posible que esta solicitud haya sido manipulada en tránsito o que alguien esté falsificando solicitudes a tu endpoint.
Ejemplo para una solicitud con un cuerpo:

Ejemplos de firma de solicitud v1:

Ejemplo en Python

Ejemplo de Ruby

Ejemplo de Node.js

Ejemplo de Java

El hash resultante sería el siguiente: 232db2615f3d666fe21a8ec971ac7b5402d33b9a925784df3ca654d05f4817de

Validar solicitudes usando la firma de solicitud v2

Si tu aplicación está manejando datos de una acción de webhook en un workflow o si estás devolviendo datos para una tarjeta del CRM personalizada, la solicitud de HubSpot se envía con el encabezado X-HubSpot-Signature-Version definido como v2. El encabezado X-HubSpot-Signature será un hash SHA-256 creado usando el secreto del cliente de tu aplicación junto con detalles de la solicitud. Para verificar esta firma, realiza los siguientes pasos:
  • Crea una cadena que concatene lo siguiente: Client secret + http method + URI + request body (si está presente).
  • Crea un hash SHA-256 de la cadena resultante.
  • Compara el valor del hash a la firma.
    • Si son iguales, esta solicitud ha superado la validación.
    • Si estos valores no coinciden, es posible que esta solicitud haya sido manipulada en tránsito o que alguien esté falsificando solicitudes a tu endpoint.
Notas:
  • La URI utilizada para crear la cadena de origen debe coincidir exactamente con la solicitud original, incluyendo el protocolo. Si tienes problemas para validar la firma, asegúrate de que cualquier parámetro de consulta esté en el mismo orden que se enumeró en la solicitud original.
  • La cadena de origen debe tener codificación UTF-8 antes de calcular el hash SHA-256.

Ejemplo de una solicitud GET:

En el caso de una solicitud GET, necesitarías el secreto del cliente de tu aplicación y campos específicos de los metadatos de la solicitud. Estos campos se enumeran a continuación con valores de marcadores de posición incluidos:
  • Secreto del cliente yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  • Método HTTP: GET
  • URI https://www.example.com/webhook_uri
  • Cuerpo de la solicitud: ""
La cadena concatenada resultante sería: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyGEThttps://www.example.com/webhook_uri Después de calcular un hash SHA-256 de la cadena concatenada anterior, la firma resultante que esperarías que coincidiera con la del encabezado sería: eee2dddcc73c94d699f5e395f4b9d454a069a6855fbfa152e91e88823087200e

Ejemplo de una solicitud POST

En el caso de una solicitud POST, necesitarías el secreto del cliente de tu aplicación, campos específicos de los metadatos de la solicitud y una representación de cadena del cuerpo de la solicitud (por ejemplo, usar JSON.stringify(request.body) para un servicio de Node.js). Estos campos se enumeran a continuación con valores de marcadores de posición incluidos:
  • Secreto del cliente yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  • Método HTTP: POST
  • URI https://www.example.com/webhook_uri
  • Cuerpo de la solicitud: {"example_field":"example_value"}
La cadena concatenada resultante sería: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyPOSThttps://www.example.com/webhook_uri{"example_field":"example_value"} Después de calcular un hash SHA-256 de la cadena concatenada anterior, la firma resultante que esperarías que coincidiera con la del encabezado sería:9569219f8ba981ffa6f6f16aa0f48637d35d728c7e4d93d0d52efaa512af7900 Después de la firma [SHA-ing], podrías comparar la firma esperada resultante con la proporcionada en el encabezado x-hubspot-signature de la solicitud: El fragmento de código de Node.js que aparece abajo detalla cómo podrías incorporar la validación de solicitudes v2 correspondiente a una solicitud GET si estuvieras ejecutando un servidor Express para manejar las solicitudes entrantes. Ten en cuenta que el bloque de código que aparece abajo es un ejemplo y omite ciertas dependencias que podrías necesitar para ejecutar un servicio Express con todas las funciones. Confirma que estás ejecutando las bibliotecas estables y seguras más recientes al implementar la validación de solicitudes para tu servicio específico.

Ejemplos de firma de solicitud v2:

Ejemplo de Node.js

Ejemplo de Java

Validar la firma de solicitud v3

El encabezado X-HubSpot-Signature-v3 será un hash SHA-256 creado usando el secreto del cliente de tu aplicación junto con detalles de la solicitud. También incluirá un encabezado X-HubSpot-Request-Timestamp. Al validar una solicitud que utiliza el encabezado X-HubSpot-Signature-v3, deberás
  • Rechazar la solicitud si la marca de tiempo es anterior a 5 minutos.
  • En la URI de la solicitud, decodifica cualquiera de los caracteres codificados por URL que se enumeran en la siguiente tabla. No necesitas decodificar el signo de interrogación que denota el comienzo de la cadena de consulta.
  • Crea una cadena codificada utf-8 que concatene lo siguiente: requestMethod + requestUri + requestBody + marca de tiempo. La marca de tiempo es proporcionada por el encabezado X-HubSpot-Request-Timestamp.
  • Crea un hash SHA-256 de la cadena resultante usando el secreto de la aplicación como el secreto de la función HMAC SHA-256.
  • Base64 codifica el resultado de la función HMAC.
  • Compara el valor del hash a la firma. Si son iguales, significa que esta solicitud se verificó como proveniente de HubSpot. Se recomienda que uses la comparación de cadenas en tiempo constante para protegerte de los ataques de sincronización.
Los fragmentos de código de la siguiente sección detallan cómo podrías incorporar la validación de solicitudes v3 para una solicitud POST si estuvieras ejecutando un servicio backend para gestionar las solicitudes entrantes. Ten en cuenta que el bloque de código que aparece abajo es un ejemplo y omite ciertas dependencias que podrías necesitar para ejecutar un servicio Express con todas las funciones. Confirma que estás ejecutando las bibliotecas estables y seguras más recientes al implementar la validación de solicitudes para tu servicio específico.

Ejemplos de firma de solicitud v3:

Ejemplo de Node.js

Ejemplo de Java

Última modificación el 10 de febrero de 2026