ReOTP.
Sécurité et synchronisation/Les webhooks (Webhooks) et HMAC
1 min de lecture

Les webhooks (Webhooks) et HMAC

Apprenez à recevoir des notifications en temps réel et en toute sécurité lors de la vérification d'un numéro de téléphone.

Les Webhooks sont la méthode la plus rapide et la plus sécurisée pour savoir si l'utilisateur a vérifié avec succès sans avoir besoin de SSE (Server-Sent Events) (vérification continue).

Lorsque l'utilisateur envoie le message et qu'il est correctement correspondant, notre système envoie une requête POST vers l'URL que vous avez préalablement définie dans les paramètres du projet.

Sécurité des webhooks (HMAC Signature)

Pour garantir que les requêtes proviennent réellement de nos serveurs et non d'attaques fantômes, nous signons chaque requête à l'aide de l'algorithme HMAC-SHA256.

1. Rendez-vous dans les paramètres du projet et générez un Webhook Secret.

2. La signature chiffrée sera incluse dans l'en-tête de la requête sous le nom x-webhook-signature.

3. Vous devez dans votre serveur calculer la signature en utilisant le même Secret que le vôtre et la comparer à la signature transmise.

Code d'intégration (SDK)
const express = require('express');
const crypto = require('crypto');
const app = express();

const WEBHOOK_SECRET = 'your_webhook_secret_here';

// Must parse raw body to verify signature correctly
app.use(express.json());

app.post('/webhook/reotp', (req, res) => {
  const signatureHeader = req.headers['x-webhook-signature'];
  const payloadString = JSON.stringify(req.body);

  // Calculate HMAC SHA256
  const expectedSignature = crypto
    .createHmac('sha256', WEBHOOK_SECRET)
    .update(payloadString)
    .digest('hex');

  // Securely compare signatures
  if (signatureHeader !== expectedSignature) {
    return res.status(401).send('Invalid signature');
  }

  // Handle successful verification
  const { event, phoneNumber, requestId } = req.body;
  if (event === 'verification.success') {
    console.log(`User ${phoneNumber} verified! (ID: ${requestId})`);
    // Login user, create session, update DB, etc.
  }

  // Must return 200 OK so we know it was delivered
  res.status(200).send('OK');
});

app.listen(3000, () => console.log('Listening for Webhooks...'));