En-tetes de signature
Chaque requete POST webhook inclut trois en-tetes :Secret de signature
Lorsque vous creez un endpoint webhook, la reponse inclut un champsigning_secret. Ce secret a le format whsec_<base64key> et est utilise pour verifier les signatures.
Stockez-le de maniere securisee — traitez-le comme un mot de passe. S’il est compromis, effectuez une rotation via l’API.
Algorithme de verification
1
Extraire les en-tetes
Recuperez
webhook-id, webhook-timestamp et webhook-signature depuis les en-tetes de la requete.2
Valider l'horodatage
Rejetez les requetes dont l’horodatage est eloigne de plus de 5 minutes de l’heure actuelle de votre serveur. Cela empeche les attaques par rejeu.
3
Construire le contenu signe
Concatenez l’identifiant du webhook, l’horodatage et le corps brut de la requete avec des points :
4
Calculer la signature attendue
- Supprimez le prefixe
whsec_de votre secret de signature. - Decodez en base64 la chaine restante pour obtenir les octets de la cle.
- Calculez le HMAC-SHA256 du contenu signe avec les octets de la cle.
- Encodez le resultat en base64.
5
Comparer les signatures
L’en-tete
webhook-signature peut contenir plusieurs signatures separees par des espaces (pour la rotation des secrets). Chacune a un prefixe v1,. Comparez votre signature calculee avec chacune d’entre elles. Si l’une correspond, la signature est valide.Exemples de code
- Node.js
- Python
- Go