ReOTP.
Безпека та синхронізація/Вебхуки (Webhooks) та HMAC
1 Хвилина читання

Вебхуки (Webhooks) та HMAC

Дізнайтеся, як отримувати безпечні миттєві сповіщення під час перевірки номеру телефону.

Вебхуки (Webhooks) — це найшвидший і найбезпечніший спосіб дізнатися, що користувач успішно пройшов перевірку, без необхідності використання SSE (Server-Sent Events) (постійної перевірки).

Коли користувач надсилає повідомлення та воно успішно зіставляється, наша система надсилає запит POST на URL-адресу, яку ви попередньо визначили в налаштуваннях проєкту.

Безпека вебхуків (HMAC Signature)

Щоб переконатися, що запити надходять саме від наших серверів, а не є фальшивими атаками, ми підписуємо кожен запит за допомогою алгоритму HMAC-SHA256.

1. Перейдіть до налаштувань проєкту та згенеруйте секрет вебхука (Webhook Secret).

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

3. Ви повинні обчислити підпис на своєму сервері, використовуючи власний секрет, і порівняти його з надісланим підписом.

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