En-têtes reçus
Le Commis ajoute ces en-têtes à chaquePOST :
| En-tête | Description |
|---|---|
X-LeCommis-Signature | Signature HMAC au format sha256=<hex>. |
X-LeCommis-Timestamp | Date d’émission, en secondes epoch. Sert à reconstruire la charge signée et à détecter le rejeu. |
X-LeCommis-Delivery | Identifiant unique de la livraison (ex. whd_3f9a...). Sert à l’idempotence. |
User-Agent | LeCommis-Webhook/1.0. |
Content-Type | application/json. |
Comment la signature est calculée
La signature est un HMAC-SHA256, encodé en hexadécimal et préfixésha256=. La charge signée combine le timestamp et le corps brut de la requête :
Vérification pas à pas
Récupérez le corps brut et les en-têtes
Lisez le corps de la requête en chaîne brute, plus
X-LeCommis-Signature et X-LeCommis-Timestamp.Calculez le HMAC attendu
HMAC_SHA256(signing_secret, charge_signée) encodé en hexadécimal, préfixé sha256=.Comparez à temps constant
Comparez votre valeur à
X-LeCommis-Signature avec une comparaison à temps constant (crypto.timingSafeEqual). N’utilisez jamais ==.Exemple de vérification
Node.js (Express)
Le secret de signature
Lesigning_secret est propre à chaque endpoint webhook, configuré dans la page « réglages API » de l’établissement. Vous pouvez le régénérer (regenerate_secret) à tout moment depuis ces mêmes réglages API — pensez alors à mettre à jour la valeur côté votre serveur. Stockez-le comme un secret (variable d’environnement, coffre-fort), jamais en clair dans le code.
Régénérer le secret depuis les réglages API invalide immédiatement l’ancienne valeur : les livraisons signées avec l’ancien secret échoueront jusqu’à ce que votre serveur utilise le nouveau. Régénérez quand vous suspectez une fuite, puis déployez la nouvelle valeur sans délai.