Sécurité : authentification et signature des webhooks

Sécurité : authentification et signature des webhooks

Bonnes pratiques pour garantir intégrité et authenticité des notifications envoyées à vos destinations externes

Protégez vos webhooks : secrets, en‑têtes attendus, méthodes supportées et vérifications à effectuer côté destinataire.

Ce que couvre cette page

Créer & lister destinations

Créer une destination de webhook (URL, méthode HTTP, en‑têtes, options d’authentification et de signature) et consulter la liste de destinations existantes.

Options d'authentification

Support des tokens (Bearer), Basic auth, signatures HMAC, et options avancées (mTLS / certificats) selon le cas d’usage.

Vérification & retries

Recommandations pour vérifier l’intégrité des payloads, protéger contre la relecture et gérer les tentatives de réessai et l’idempotence.

Tests & rotation

Procédures de test, diagnostic d’échec et rotation sûre des secrets sans perte de messages.

En‑têtes attendus

Liste des en‑têtes que le destinataire doit vérifier (ex. X-Signature, X-Timestamp, Authorization, X-Request-Id).

Guides pratiques

Pas à pas pour configurer, tester et durcir vos destinataires de webhooks dans l’interface.

À retenir

Cette page vous guide pour configurer la sécurité des destinations de webhook et pour implémenter les contrôles côté destinataire afin d’assurer que seuls les messages authentiques et intacts sont traités.

Introduction

Ce guide détaille comment configurer l’authentification et la signature des webhooks, quelles en‑têtes attendre côté destinataire, les méthodes supportées et les vérifications à effectuer pour garantir intégrité, authenticité et résilience des livraisons. Il est destiné aux utilisateurs non‑techniques qui administrent ou consomment des destinations externes via l’interface.


Workflow principal : Créer une destination de webhook

Suivez ces étapes pour ajouter une nouvelle destination (URL) et activer les options de sécurité (authentification et signature).

Créer une destination : pas à pas

1

Ouvrir le gestionnaire de destinations

Dans l’interface du gestionnaire de destinations, cliquez sur “Nouvelle destination” ou l’icône équivalente pour commencer la création.

2

Renseigner l'URL de réception

Saisissez l’URL complète du destinataire (https://…). Assurez‑vous que le domaine est accessible depuis l’extérieur et que le certificat TLS est valide si vous utilisez HTTPS.

3

Choisir la méthode HTTP

Sélectionnez la méthode souhaitée (généralement POST). Pour certains flux, PUT ou PATCH peuvent être utilisés — vérifiez ce que le destinataire attend.

4

Ajouter en‑têtes personnalisés

Ajoutez en‑têtes nécessaires comme Content-Type (application/json) et tout en‑tête exigé par le destinataire (ex. X-Custom-Token). Évitez d’exposer le secret dans un en‑tête public.

5

Configurer l'authentification

Choisissez le mode d’authentification : Bearer token, Basic auth, ou signature HMAC. Si vous utilisez un token, saisissez le token (ou sélectionnez un type géré) dans le champ prévu.

6

Activer la signature (fortement recommandé)

Activez la signature HMAC si disponible et fournissez/validez un secret partagé. Sélectionnez l’algorithme recommandé (ex. HMAC‑SHA256) si l’option existe.

7

Configurer les retries et la résilience

Définissez la politique de réessai (nombre de tentatives, intervalle exponentiel) et activez le backoff pour éviter la surcharge côté destinataire.

8

Sauvegarder et tester

Enregistrez la destination puis lancez un test de livraison (envoi d’un payload de test) pour vérifier l’authentification, la signature et la réception.

9

Vérifier les logs et réponses

Consultez les logs de test et la réponse HTTP du destinataire pour corriger les en‑têtes, le format du payload ou les erreurs d’authentification.

Choix du secret

Utilisez un secret suffisamment long et aléatoire (au moins 256 bits / 32 octets) et stockez‑le dans un gestionnaire sécurisé. Ne réutilisez pas le même secret pour plusieurs destinations externes.


Configurer les mécanismes d’authentification et de signature

Détail des options courantes et recommandations de configuration.

  • Description : Le serveur émetteur signe le corps du message (ou le corps + timestamp) avec un secret partagé et un algorithme HMAC (ex. SHA256).
  • Quand l’utiliser : idéal quand le destinataire doit vérifier l’intégrité et l’origine du payload.
  • Ce que vous devez configurer dans l’interface : activer “Signature HMAC”, choisir l’algorithme, saisir ou générer un secret.
  • En‑têtes attendus côté destinataire : X-Signature (ou X-Signature-256), éventuellement X-Signature-Timestamp.
  • Vérifications recommandées côté destinataire : vérifier le timestamp (fenêtre de tolérance), recalculer l’HMAC en utilisant le même format (ordre des éléments, encodage) et comparer en temps constant.
  • Avantage : ne transmet pas le secret, protège le contenu même si un serveur tiers intercepte la charge utile.
  • Limite : il faut synchroniser correctement le format de calcul (ex. inclure/ignorer certains champs).
  • Description : le destinataire vérifie un token statique envoyé dans l’en‑tête Authorization: Bearer ou dans un en‑tête personnalisé (ex. X-Api-Key).
  • Quand l’utiliser : pour simplicité et quand vous faites confiance au transport TLS.
  • Config : insérez le token dans le champ d’authentification lors de la création de la destination.
  • En‑têtes attendus côté destinataire : Authorization: Bearer ou X-Api-Key.
  • Vérifications recommandées : valider l’exactitude du token et limiter sa validité/permissions.
  • Avantage : simple à mettre en place.
  • Limite : moins résistant aux attaques de relecture si aucun mécanisme de timestamp/signature n’est joint.
  • Description : Basic Auth (user:password encodé) ou authentification par certificat pour établir une connexion mutuelle.
  • Quand l’utiliser : intégrations legacy (Basic) ou environnements hautement sécurisés (mTLS).
  • Config : renseignez identifiants Basic ou fournissez certificats selon les capacités de la plateforme.
  • En‑têtes attendus : Authorization: Basic ; pour mTLS, la négociation se fait au niveau TLS.
  • Vérifications : pour Basic, comparez l’identifiant/secret côté destinataire ; pour mTLS, vérifiez que le certificat est valide et émis par une autorité approuvée.
  • Limite : Basic expose les identifiants si TLS n’est pas utilisé; mTLS demande gestion des certificats côté destinataire.

Vérifications indispensables côté destinataire

Ce que doit effectuer l’équipe qui reçoit les webhooks pour garantir sécurité et intégrité.

Vérifications à effectuer sur chaque requête entrante

1

1 — Valider le transport

N’acceptez que les connexions HTTPS avec certificats valides. Refusez les requêtes HTTP non sécurisées.

2

2 — Vérifier en‑têtes d'authentification

Vérifiez la présence et la validité de Authorization ou X-Api-Key si c’est la méthode configurée. Rejetez la requête si l’en‑tête est absent ou invalide.

3

3 — Contrôler la signature HMAC

Si une signature est fournie, récupérez le payload brut (avant parsing), appliquez la même méthode de hachage et comparez la signature reçue et calculée en utilisant une comparaison en temps constant.

4

4 — Vérifier le timestamp (anti‑replay)

Si un en‑tête X-Signature-Timestamp est présent, acceptez la requête seulement si le timestamp est dans une fenêtre de tolérance (ex. ±5 minutes). Rejetez les requêtes trop anciennes ou futures.

5

5 — Valider le Content‑Type et le schéma

Vérifiez que le Content-Type correspond (ex. application/json) et que le payload respecte le schéma attendu avant de l’utiliser.

6

6 — Gérer l'idempotence

Pour les opérations non‑répétables, utilisez un identifiant unique fourni (ex. X-Request-Id) et stockez‑le temporairement pour détecter les livraisons en double.

7

7 — Journalisation et surveillance

Enregistrez les en‑têtes, les résultats de vérification (succès/échec) et la réponse renvoyée pour faciliter le diagnostic.

8

8 — Réponse correcte et codes HTTP

Renvoyez 2xx pour accepter la livraison, 4xx pour les erreurs définitives (ex. authentification échouée), 5xx si l’erreur est côté destinataire et mériterait un réessai.

Ne parsez pas le JSON avant la vérification

Pour vérifier correctement une signature HMAC, calculez la signature sur le corps brut tel qu’il est reçu. Ne transformez ni ne reformatez le payload avant vérification.

Utilisez un identifiant de requête

Incluez et vérifiez un en‑tête X-Request-Id unique. Il facilite la détection de doublons et le suivi des livraisons dans les logs.

Erreur fréquente : comparer les signatures naïvement

Évitez les comparaisons de chaînes simples ; elles sont vulnérables au timing attack. Utilisez une comparaison en temps constant et refusez les signatures mal formées.


Tester et diagnostiquer un webhook

Procédure pour tester une destination et résoudre les échecs courants.

Tester une destination et interpréter les résultats

1

Envoyer un test depuis l'interface

Lancez l’envoi de test. Le test doit reproduire l’en‑tête de signature et d’authentification configurés.

2

Analyser la réponse HTTP

  • 2xx : livraison acceptée.
  • 4xx : problème d’authentification ou de format ; vérifiez les en‑têtes et le schéma.
  • 5xx : problème côté destinataire ; vérifier logs serveur du destinataire et re‑essayer.
3

Consulter les logs de vérification

Comparez les signatures (attendue vs calculée) et vérifiez le timestamp. Si le calcul diffère, vérifiez l’encodage, l’ordre des champs et la présence d’espaces ou de saut de ligne.

4

Vérifier TLS et certificats

Assurez‑vous que le certificat du destinataire est valide et que le nom du host correspond à l’URL utilisée. Les erreurs TLS empêchent la livraison.

5

Essayer différents payloads

Testez avec payloads petits et volumineux. Certains destinataires ont des limites de taille ou des timeouts qui cassent les livraisons.

6

Activer temporisation et backoff

Si le destinataire est parfois indisponible, vérifiez la politique de retry et le backoff configurés pour éviter surcharge et duplications.


Rotation des secrets (migration sans perte)

Règles pour changer un secret sans interrompre les livraisons.

Rotation sécurisée d'un secret

1

Planifier la rotation

Prévenez le destinataire et planifiez une fenêtre de maintenance si nécessaire.

2

Activer la double‑acceptation

Configurez temporairement le destinataire pour accepter l’ancienne et la nouvelle signature simultanément (vérifiez les deux secrets lors de la validation).

3

Mettre à jour la destination

Dans l’interface, remplacez le secret par le nouveau secret et sauvegardez.

4

Validation progressive

Envoyez des tests et monitorisez les logs pour s’assurer que la nouvelle signature est validée. Conservez les journaux des deux signatures pendant une période transitoire (ex. 7 jours).

5

Retirer l'ancien secret

Une fois stabilisé, retirez l’ancien secret côté destinataire et n’acceptez plus que la nouvelle signature.

6

Révoquer l'ancien secret

Supprimez l’ancien secret des systèmes, changez les clés si besoin et enregistrez l’opération dans votre gestionnaire d’accès.

Ne jamais exposer un secret dans des logs publics

Lors des tests, évitez d’afficher le secret en clair dans des logs partagés. Masquez ou hachez toute valeur sensible dans les sorties.


Comparaison des approches

Avant de choisir, comparez rapidement les méthodes les plus communes.

HMAC (Signature)

  • Intègre vérification d’origine et d’intégrité
  • Bon contre relecture si combiné avec timestamp
  • Nécessite partage et rotation du secret
  • Requiert calcul côté destinataire

Token (Bearer) / Basic

  • Simple à mettre en place
  • Facile à valider côté destinataire
  • Moins protecteur contre l’altération du payload
  • Doit être utilisé sur TLS et avec rotation fréquente

Scénarios avancés et cas limites

  • Payload volumineux : fractionnez ou utilisez URLs signées pour pointer vers le contenu plutôt que d’envoyer de très gros bodies.
  • Horloge désynchronisée : si vos serveurs ont une dérive d’horloge, étendez légèrement la fenêtre de tolérance (ex. ±5–10 minutes) et surveillez la dérive.
  • Réessais massifs : implémentez des limites et des retenues côté envoyeur pour ne pas inonder un destinataire en panne.
  • Idempotence : si un webhook déclenche une action coûteuse, assurez‑vous que le destinataire peut détecter et ignorer doublons via un identifiant unique.
  • Multiple destinations : utilisez des secrets différents par destination afin qu’une compromission n’affecte pas toutes les intégrations.

Questions fréquentes


Actions rapides (récapitulatif)

Checklist rapide avant activation

  • URL HTTPS valide et accessible
  • Méthode HTTP correcte (POST par défaut)
  • Content-Type configuré (application/json)
  • Authentification configurée (token/Basic/HMAC)
  • Secret généré et stocké en sécurité
  • En‑têtes attendus documentés pour le destinataire
  • Policy de retry définie et testée
  • Test de livraison réussi et logs validés

Automatisez les tests de régression

Intégrez des tests automatiques qui envoient périodiquement des webhooks de test vers vos endpoints afin de détecter les régressions liées à la signature/rotation ou aux certificats.

Prêt à sécuriser vos destinations ?

Suivez le guide de création ci‑dessus, activez la signature HMAC et testez la réception côté destinataire avant de passer en production.