Passer au contenu principal
Didit lève 7,5 M$ pour bâtir l'infrastructure pour l'identité et la fraude
Didit
Retour au blog
Blog · 6 mars 2026

Sécurisez Votre Backend Node.js : Validation HMAC pour les Webhooks Didit (FR)

Mettre en œuvre des mesures de sécurité robustes pour les webhooks est crucial pour l'intégrité des données et la prévention des accès non autorisés.

Par DiditMis à jour le
secure-your-nodejs-backend-hmac-validation-for-didit-webhooks.png

Protégez l'Intégrité des Données La validation de signature HMAC est essentielle pour vérifier l'authenticité et l'intégrité des charges utiles des webhooks, protégeant ainsi votre backend contre les requêtes falsifiées ou frauduleuses.

Prévenez les Attaques par Relecture La validation de l'horodatage, associée aux signatures HMAC, ajoute une couche de défense cruciale contre les attaques par relecture, garantissant que seules les notifications récentes sont traitées.

Intégration Transparente L'approche "developer-first" de Didit fournit une documentation et des outils clairs, rendant l'intégration d'un traitement sécurisé des webhooks dans votre application Node.js simple et efficace.

L'Infrastructure Sécurisée de Didit La plateforme de Didit est conçue avec la sécurité à l'esprit, offrant des notifications KYC en temps réel via des webhooks avec une vérification robuste de la signature HMAC, vous permettant de construire des solutions d'identité fiables et conformes.

Le Besoin Crucial de Sécurité des Webhooks

Les webhooks sont des outils puissants pour la communication en temps réel entre les services, permettant des mises à jour instantanées et des architectures événementielles. Dans le contexte de la vérification d'identité, Didit utilise des webhooks pour notifier votre backend de l'achèvement des sessions de vérification, des résultats de contrôle AML ou d'autres événements critiques liés à l'identité. Bien qu'incroyablement efficaces, les webhooks introduisent également des défis de sécurité. Sans une validation appropriée, un acteur malveillant pourrait envoyer des charges utiles de webhook falsifiées ou altérées, entraînant un traitement incorrect des données, des actions non autorisées, ou même un compromis du système.

C'est là que la validation de signature HMAC (Hash-based Message Authentication Code) devient indispensable. HMAC fournit un mécanisme cryptographique pour vérifier à la fois l'authenticité et l'intégrité d'un message. En utilisant une clé secrète partagée, votre backend peut s'assurer que la charge utile du webhook provient bien de Didit et n'a pas été altérée pendant le transit. Pour tout système traitant des données d'identité sensibles, comme celles traitées par les services de vérification d'identité, de contrôle AML ou de preuve d'adresse de Didit, ce niveau de sécurité n'est pas seulement une bonne pratique, c'est une nécessité.

Comprendre la Validation de Signature HMAC

La validation HMAC fonctionne en générant une signature unique pour chaque charge utile de webhook à l'aide d'une clé secrète connue uniquement de Didit et de votre application. Lorsque votre backend Node.js reçoit un webhook, il effectue le même calcul de signature en utilisant sa copie de la clé secrète. Si la signature calculée correspond à la signature fournie dans les en-têtes du webhook, vous pouvez être sûr que la charge utile est authentique et n'a pas été altérée.

Les webhooks de Didit incluent un en-tête X-Signature contenant la signature HMAC-SHA256 et un en-tête X-Timestamp. L'horodatage est crucial pour prévenir les attaques par relecture. Une attaque par relecture se produit lorsqu'un attaquant intercepte un webhook légitime et le renvoie plus tard. En validant que l'horodatage est récent (par exemple, dans une fenêtre de 5 minutes), vous pouvez rejeter les requêtes anciennes, potentiellement rejouées.

Implémentation de la Validation HMAC en Node.js

Voyons les étapes pour implémenter la validation de signature HMAC pour les webhooks Didit dans une application Node.js Express. Vous aurez besoin d'accéder à votre clé secrète de webhook, que vous pouvez trouver dans votre Didit Business Console ou récupérer via l'API de gestion.

1. Configurez Votre Point d'Accès Webhook

Tout d'abord, configurez un point d'accès Express capable de recevoir des requêtes POST. Il est crucial d'accéder au corps de la requête brut avant tout middleware d'analyse JSON, car la signature est calculée sur la charge utile brute.


const express = require('express');
const crypto = require('crypto');
const bodyParser = require('body-parser');

const app = express();
const DIDIT_WEBHOOK_SECRET = process.env.DIDIT_WEBHOOK_SECRET; // Stockez de manière sécurisée !

// Middleware pour obtenir le corps brut
app.use(bodyParser.json({ verify: (req, res, buf) => {
  req.rawBody = buf.toString();
}}));

app.post('/api/webhooks/didit', (req, res) => {
  // La logique de traitement du webhook sera ici
  res.status(200).send('Webhook reçu');
});

app.listen(3000, () => console.log('Serveur en cours d\'exécution sur le port 3000'));

2. Vérifiez la Signature HMAC

Dans votre gestionnaire de webhook, vous extrairez l'horodatage et la signature des en-têtes, reconstruirez la charge utile signée et comparerez votre signature calculée avec celle fournie par Didit.


app.post('/api/webhooks/didit', (req, res) => {
  const signatureHeader = req.headers['x-signature'];
  const timestampHeader = req.headers['x-timestamp'];
  const rawBody = req.rawBody;

  if (!signatureHeader || !timestampHeader || !rawBody) {
    return res.status(400).send('En-têtes ou corps de webhook manquants.');
  }

  const [algorithm, diditSignature] = signatureHeader.split('=');

  if (algorithm !== 'sha256') {
    return res.status(400).send('Algorithme de signature non pris en charge.');
  }

  // Reconstruire la chaîne de charge utile signée
  const signedPayload = `${timestampHeader}.${rawBody}`;

  // Calculer votre propre signature
  const expectedSignature = crypto
    .createHmac('sha256', DIDIT_WEBHOOK_SECRET)
    .update(signedPayload)
    .digest('hex');

  // Comparer les signatures de manière sécurisée
  const signatureMatches = crypto.timingSafeEqual(
    Buffer.from(diditSignature, 'utf8'),
    Buffer.from(expectedSignature, 'utf8')
  );

  if (!signatureMatches) {
    console.warn('Inadéquation de la signature du webhook !');
    return res.status(401).send('Signature invalide.');
  }

  // La signature est valide, vérifions maintenant l'horodatage
  // ... (validation de l'horodatage à l'étape suivante)

  // Traiter l'événement
  console.log('Webhook validé avec succès :', req.body);
  res.status(200).send('Webhook reçu et traité.');
});

3. Valider l'Horodatage

Après avoir vérifié la signature, assurez-vous que le webhook n'est pas une relecture. Une pratique courante consiste à autoriser une petite fenêtre de tolérance (par exemple, 5 minutes) pour les délais réseau.


// ... (dans le gestionnaire de webhook, après la validation de la signature)

  const fiveMinutesAgo = Date.now() / 1000 - (5 * 60); // 5 minutes en secondes
  const eventTimestamp = parseInt(timestampHeader, 10);

  if (isNaN(eventTimestamp) || eventTimestamp < fiveMinutesAgo) {
    console.warn('L\'horodatage du webhook est trop ancien ou invalide !');
    return res.status(401).send('Horodatage invalide ou ancien.');
  }

  // Vous pouvez maintenant analyser et traiter le corps JSON en toute sécurité
  try {
    const event = JSON.parse(rawBody);
    console.log('Événement Didit traité :', event);
    // Exemple : Mettre à jour le statut de l'utilisateur en fonction de event.database_validation.status

    // Structure du rapport de validation de la base de données de Didit :
    // const validationStatus = event.database_validation.status;
    // const matchType = event.database_validation.match_type;
    // console.log(`Statut de validation : ${validationStatus}, Type de correspondance : ${matchType}`);

    res.status(200).send('Webhook reçu et traité.');
  } catch (error) {
    console.error('Erreur lors de l\'analyse du corps du webhook :', error);
    res.status(400).send('Corps JSON invalide.');
  }
});

Meilleures Pratiques pour la Gestion des Webhooks

  • Stockez les Secrets de Manière Sécurisée : Ne codez jamais en dur votre clé secrète de webhook. Utilisez des variables d'environnement ou un service de gestion de secrets sécurisé.
  • Idempotence : Concevez vos gestionnaires de webhook pour qu'ils soient idempotents. Cela signifie que le traitement du même webhook plusieurs fois (en raison de nouvelles tentatives, par exemple) doit avoir le même effet que son traitement une seule fois.
  • Traitement Asynchrone : Pour les tâches de longue durée, accusez réception du webhook immédiatement avec une réponse 200 OK, puis traitez la charge utile de manière asynchrone à l'aide d'une file d'attente de messages. Cela évite les délais d'attente et garantit que Didit ne continue pas de réessayer le webhook.
  • Journalisation et Surveillance : Implémentez une journalisation robuste pour tous les webhooks reçus, y compris les échecs de validation. Surveillez votre point d'accès webhook pour détecter toute activité inhabituelle ou des taux d'erreur élevés.
  • Gestion des Erreurs : Retournez les codes de statut HTTP appropriés (par exemple, 400 pour une mauvaise requête, 401 pour non autorisé, 500 pour les erreurs de serveur) pour aider Didit à comprendre si une nouvelle tentative est nécessaire.

Comment Didit Contribue

Didit est conçu pour être une plateforme d'identité native d'IA, axée sur les développeurs, rendant les intégrations sécurisées comme le traitement des webhooks simples et fiables. Notre architecture modulaire signifie que vous pouvez facilement intégrer des contrôles d'identité, y compris la vérification d'identité, la vivacité passive et active, et le contrôle et la surveillance AML, et recevoir des mises à jour en temps réel via des webhooks sécurisés. Didit fournit une documentation et des exemples clairs pour l'intégration des webhooks, vous assurant de pouvoir configurer rapidement des canaux de communication robustes et sécurisés.

Nous croyons qu'il faut rendre la vérification d'identité accessible et puissante. C'est pourquoi nous offrons un KYC Core gratuit, un modèle de paiement par vérification réussie, et absolument aucun frais de configuration. En tirant parti de la plateforme Didit, vous accédez à une solution mondiale et évolutive qui automatise la confiance et orchestre les risques, tout en maintenant les normes de sécurité les plus élevées, y compris la validation de signature HMAC pour les notifications en temps réel.

Prêt à Commencer ?

Prêt à voir Didit en action ? Obtenez une démo gratuite dès aujourd'hui.

Commencez à vérifier les identités gratuitement avec le niveau gratuit de Didit.

Infrastructure pour l'identité et la fraude.

Une seule API pour le KYC, le KYB, la surveillance des transactions et le screening de portefeuilles. Intégration en 5 minutes.

Demande à une IA de résumer cette page
Sécuriser Node.js : Validation HMAC des Webhooks Didit.