Aller au contenu principal

Vérification de signature

Chaque requête webhook inclut un header de signature que vous devez vérifier pour vous assurer que la requête provient bien d’Ikawaari.

Fonctionnement

Chaque endpoint webhook possède un secret de signature unique (commence par whsec_). Ikawaari utilise ce secret pour générer une signature HMAC-SHA256 incluse dans le header Ikawaari-Signature.

Étapes de vérification

1. Extraire la signature

Ikawaari-Signature: t=1708300800,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd

2. Préparer le payload signé

{timestamp}.{raw_body}

3. Calculer la signature attendue

const crypto = require('crypto');

function verifyWebhookSignature(payload, header, secret) {
const [tPart, vPart] = header.split(',');
const timestamp = tPart.split('=')[1];
const signature = vPart.split('=')[1];

const signedPayload = `${timestamp}.${payload}`;
const expected = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex');

// Comparaison sûre vis-à-vis du timing
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}

4. Rejeter les événements trop anciens

Vérifiez que l’horodatage se trouve dans une fenêtre de 5 minutes par rapport à l’heure courante afin de prévenir les attaques par rejeu.

attention

Vérifiez toujours les signatures webhook en production. Ne faites jamais confiance à un payload webhook sans vérification.