ReOTP.
Безопасность и синхронизация/Вебхуки и HMAC
1 минута чтения

Вебхуки и HMAC

Узнайте, как получать безопасные уведомления в реальном времени при подтверждении номера телефона.

Веб-хуки (Webhooks) — это самый быстрый и безопасный способ узнать, что пользователь успешно прошел вещрификацию, без необходимости использовать SSE (Server-Sent Events) (постоянный опрос).

Когда пользователь отправляет сообщение и оно успешно сопоставляется, наша система отправляет запрос POST на URL-адрес, который вы предварительно указали в настройках проекта.

Безопасность веб-хуков (HMAC Signature)

Чтобы гарантировать, что запросы действительно поступают с наших серверов, а не являются поддельными атаками, мы подписываем каждый запрос с помощью алгоритма HMAC-SHA256.

1. Перейдите в настройки проекта и сгенерируйте секрет веб-хука (Webhook Secret).

2. Зашифрованная подпись будет прикреплена к заголовку запроса (Header) под именем x-webhook-signature.

3. На вашем сервере вы должны вычислить подпись, используя ваш собственный секрет, и сравнить ее с отправленной подписью.

Код интеграции (SDK)
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...'));