ReOTP.
Seguridad y Sincronización/Webhooks y HMAC
1 min de lectura

Webhooks y HMAC

Aprende cómo recibir notificaciones instantáneas y seguras cuando se verifica un número de teléfono.

Los Webhooks son la forma más rápida y segura de saber que un usuario se ha verificado con éxito sin necesidad de realizar SSE (Server-Sent Events) (sondeo continuo).

Cuando el usuario envía el mensaje y este coincide con éxito, nuestro sistema envía una solicitud POST a una URL que tú hayas definido previamente en la configuración del proyecto.

Seguridad de Webhooks (Firma HMAC)

Para garantizar que las solicitudes provienen realmente de nuestros servidores y no son ataques falsos, firmamos cada solicitud utilizando el algoritmo HMAC-SHA256.

1. Ve a la configuración del proyecto y genera un Webhook Secret.

2. Se adjuntará una firma cifrada en la cabecera (Header) de la solicitud llamada x-webhook-signature.

3. Debes calcular la firma en tu servidor utilizando tu propio Secret y compararla con la firma enviada.

Código de integración (SDKs)
const express = require('express');
const crypto = require('crypto');
const app = express();

const WEBHOOK_SECRET = process.env.REOTP_WEBHOOK_SECRET;
app.use(express.json());

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

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

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

  const { event, phoneNumber, requestId } = req.body;
  if (event === 'verification.success') {
    console.log(`User ${phoneNumber} verified! (ID: ${requestId})`);
  }

  res.status(200).send('OK');
});

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