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
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.
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.
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.
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.
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.
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.
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.
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.
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).
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 — Valider le transport
N’acceptez que les connexions HTTPS avec certificats valides. Refusez les requêtes HTTP non sécurisées.
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 — 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 — 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 — 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 — 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 — 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 — 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
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.
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.
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.
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.
Essayer différents payloads
Testez avec payloads petits et volumineux. Certains destinataires ont des limites de taille ou des timeouts qui cassent les livraisons.
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
Planifier la rotation
Prévenez le destinataire et planifiez une fenêtre de maintenance si nécessaire.
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).
Mettre à jour la destination
Dans l’interface, remplacez le secret par le nouveau secret et sauvegardez.
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).
Retirer l'ancien secret
Une fois stabilisé, retirez l’ancien secret côté destinataire et n’acceptez plus que la nouvelle signature.
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.