ReOTP.
Segurança e Sincronização/Webhooks e HMAC
1 min de leitura

Webhooks e HMAC

Aprenda como receber notificações instantâneas e seguras ao verificar um número de telefone.

Os Webhooks são a forma mais rápida e segura de saber se o usuário concluiu a verificação com sucesso, sem a necessidade de realizar SSE (Server-Sent Events) (polling contínuo).

Quando o usuário envia a mensagem e ela é correspondida com sucesso, nosso sistema envia uma requisição POST para uma URL previamente definida por você nas configurações do projeto.

Segurança de Webhook (HMAC Signature)

Para garantir que as requisições realmente vêm de nossos servidores e não são ataques forjados, assinamos cada requisição usando o algoritmo HMAC-SHA256.

1. Vá para as configurações do projeto e gere um Webhook Secret.

2. Uma assinatura criptografada será anexada no cabeçalho (Header) da requisição sob o nome x-webhook-signature.

3. No seu servidor, você deve calcular a assinatura usando o mesmo Secret e compará-la com a assinatura enviada.

Código de integração (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...'));