ReOTP.
Bezpieczeństwo i synchronizacja/Webhooks i HMAC
1 min. czytania

Webhooks i HMAC

Dowiedz się, jak bezpiecznie odbierać powiadomienia w czasie rzeczywistym po weryfikacji numeru telefonu.

Webhooks to najszybszy i najbezpieczniejszy sposób na dowiedzenie się, że użytkownik pomyślnie przeszedł weryfikację, bez konieczności stosowania SSE (Server-Sent Events) (ciągłego odpytywania).

Gdy użytkownik wyśle wiadomość i zostanie ona pomyślnie dopasowana, nasz system wyśle żądanie POST pod adres URL, który wcześniej zdefiniujesz w ustawieniach projektu.

Bezpieczeństwo Webhooków (Sygnatura HMAC)

Aby upewnić się, że żądania naprawdę pochodzą z naszych serwerów, a nie są sfałszowanymi atakami, podpisujemy każde żądanie za pomocą algorytmu HMAC-SHA256.

1. Przejdź do ustawień projektu i wygeneruj Webhook Secret.

2. Szyfrowany podpis zostanie dołączony do nagłówka żądania (Header) pod nazwą x-webhook-signature.

3. Na swoim serwerze musisz obliczyć podpis przy użyciu tego samego klucza Secret i porównać go z przesłanym podpisem.

Kod integracyjny (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...'));