- Pour valider une requête à l’aide de la dernière version de la signature HubSpot, utilisez l’en-tête
X-HubSpot-Signature-V3et suivez les instructions associées pour valider la version 3 de la signature. - Pour la rétrocompatibilité, les requêtes de HubSpot incluent également les anciennes versions de la signature. Pour valider une ancienne version de la signature, consultez l’en-tête
X-HubSpot-Signature-Version, puis suivez les instructions associées ci-dessous selon la versionv1ouv2.
Valider les requêtes à l’aide de la signature de requête v1
Si votre application est abonnée aux événements d’objet CRM via l’API des webhooks, les requêtes de HubSpot seront envoyées avec l’en-têteX-HubSpot-Signature-Version défini sur v1. L’en-tête X-HubSpot-Signature sera un hachage SHA-256 conçu à l’aide du secret de client de votre application associé à des détails de la requête.
Pour vérifier la version de cette signature, effectuez les étapes suivantes :
- Créez une chaîne qui regroupe les éléments suivants :
Client secret+request body(le cas échéant) - Créez un hachage SHA-256 de la chaîne résultante
- Comparez la valeur de hachage à la valeur de l’en-tête
X-HubSpot-Signature:- Si elle est égale, cette requête a été validée
- Si ces valeurs sont différentes, cette requête peut avoir été modifiée en transit ou quelqu’un peut usurper les requêtes à votre point de terminaison.
Exemples de signatures de requête v1 :
Exemple Python
Exemple Ruby
Exemple Node.js
Exemple Java
232db2615f3d666fe21a8ec971ac7b5402d33b9a925784df3ca654d05f4817de
Valider les requêtes à l’aide de la signature de requête v2
Si votre application gère des données provenant d’une action de webhook dans un workflow ou si vous renvoyez des données pour une carte CRM personnalisée, la requête de HubSpot est envoyée avec l’en-têteX-HubSpot-Signature-Version défini sur v2. L’en-tête X-HubSpot-Signature sera un hachage SHA-256 conçu à l’aide du secret de client de votre application associé à des détails de la requête.
Pour vérifier cette signature, effectuez les étapes suivantes :
- Créez une chaîne qui regroupe les éléments suivants :
Client secret+http method+URI+request body(le cas échéant) - Créez un hachage SHA-256 de la chaîne résultante
- Comparez la valeur de hachage à la signature
- Si elle est égale, cette requête a été validée
- Si ces valeurs sont différentes, cette requête peut avoir été modifiée en transit ou quelqu’un peut usurper les requêtes à votre point de terminaison.
- L’URI utilisé pour créer la chaîne source doit correspondre exactement à la requête initiale, y compris le protocole. Si vous rencontrez des difficultés lors de la validation de la signature, assurez-vous que tous les paramètres de requête sont dans le même ordre que dans la requête initiale.
- La chaîne source doit être encodée en UTF-8 avant de calculer le hachage SHA-256.
Exemple pour une requête GET
Pour une requêteGET, vous aurez besoin du secret client de votre application et des champs spécifiques des métadonnées de votre requête. Ces champs sont répertoriés ci-dessous avec des valeurs d’espace réservé incluses :
- Secret du client :
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy - Méthode HTTP :
GET - URI :
https://www.example.com/webhook_uri - Corps de la requête :
""
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyGEThttps://www.example.com/webhook_uri
Après avoir calculé un hachage SHA-256 de la chaîne concaténée ci-dessus, la signature résultante que vous vous attendez à faire correspondre à celle de l’en-tête serait : eee2dddcc73c94d699f5e395f4b9d454a069a6855fbfa152e91e88823087200e
Exemple pour une requête POST
Pour une requêtePOST, vous aurez besoin du secret client de votre application, de champs spécifiques des métadonnées de votre requête et d’une représentation sous forme de chaîne du corps de la requête (par exemple : utilisation de JSON.stringify(request.body) pour un service Node.js). Ces champs sont répertoriés ci-dessous avec des valeurs d’espace réservé incluses :
- Secret du client :
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy - Méthode HTTP :
POST - URI :
https://www.example.com/webhook_uri - Corps de la requête :
{"example_field":"example_value"}
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyPOSThttps://www.example.com/webhook_uri{"example_field":"example_value"}
Après avoir calculé un hachage SHA-256 de la chaîne concaténée ci-dessus, la signature résultante que vous vous attendez à faire correspondre à celle de l’en-tête serait : 9569219f8ba981ffa6f6f16aa0f48637d35d728c7e4d93d0d52efaa512af7900
Après [SHA-ing] la signature, vous pouvez comparer la signature attendue résultante à celle fournie dans l’en-tête x-hubspot-signature de la requête :
Le bloc de code Node.js ci-dessous détaille comment vous pouvez incorporer la validation des requêtes v2 pour une requête GET si vous exécutiez un serveur Express pour gérer les requêtes entrantes. Gardez à l’esprit que le bloc de code ci-dessous est un exemple et omet certaines dépendances dont vous pourriez avoir besoin pour exécuter un service Express complet. Confirmez que vous utilisez les dernières bibliothèques stables et sécurisées lors de la mise en œuvre de la validation des requêtes pour votre service spécifique.
Exemples de signatures de requête v2 :
Exemple Node.js
Exemple Java
Valider les signatures de requête v3
L’en-têteX-HubSpot-Signature-v3 sera un hachage HMAC SHA-256 conçu à l’aide du secret de client de votre application associé à des détails de la requête. Il comprendra également un en-tête X-HubSpot-Request-Timestamp.
Lors de la validation d’une requête à l’aide de l’en-tête X-HubSpot-Signature-v3, vous devrez :
- Rejeter la requête si l’horodatage est supérieur à 5 minutes.
- Dans l’URI de requête, décoder les caractères encodés en URL répertoriés dans le tableau ci-dessous. Vous n’avez pas besoin de décoder le point d’interrogation qui indique le début de la chaîne de requête.
| Valeur encodée | Valeur décodée |
|---|---|
%3A | : |
%2F | / |
%3F | ? |
%40 | @ |
%21 | ! |
%24 | $ |
%27 | ' |
%28 | ( |
%29 | ) |
%2A | * |
%2C | , |
%3B | ; |
- Créer une chaîne encodée en UTF-8 qui regroupe les éléments suivants :
requestMethod+requestUri+requestBody+ horodatage. L’horodatage est fourni par l’en-têteX-HubSpot-Request-Timestamp. - Créer un hachage HMAC SHA-256 de la chaîne résultante en utilisant le secret d’application comme secret pour la fonction HMAC SHA-256.
- Encoder le résultat de la fonction HMAC en Base64.
- Comparer la valeur de hachage à la signature. Si elle est égale, cette requête a été validée comme provenant de HubSpot. Il est recommandé d’utiliser une comparaison de chaîne à durée fixe pour éviter les attaques temporelles.
POST si vous exécutiez un service back-end pour gérer les requêtes entrantes. Gardez à l’esprit que les blocs de code ci-dessous omettent certaines dépendances dont vous pourriez avoir besoin pour exécuter un service back-end complet. Confirmez que vous utilisez les dernières bibliothèques stables et sécurisées lors de la mise en œuvre de la validation des requêtes pour votre service spécifique.