ReOTP.
امنیت و همگام‌سازی/وب‌هوک (Webhooks) و HMAC
1 دقیقه خواندن

وب‌هوک (Webhooks) و HMAC

با نحوه دریافت اعلان‌های لحظه‌ای و امن هنگام تایید شماره تلفن آشنا شوید.

Webhooks سریع‌ترین و امن‌ترین راه برای اطلاع از تایید موفقیت‌آمیز کاربر، بدون نیاز به استفاده از SSE (Server-Sent Events) (بررسی مداوم) است.

زمانی که کاربر پیام را ارسال کرد و با موفقیت مطابقت داده شد، سیستم ما یک درخواست POST به آدرسی (URL) که شما از قبل در تنظیمات پروژه تعیین کرده‌اید، ارسال می‌کند.

امنیت وب‌هوک (HMAC Signature)

برای اطمینان از اینکه درخواست‌ها واقعاً از سمت سرورهای ما هستند و نه حملات جعلی، ما هر درخواست را با استفاده از الگوریتم HMAC-SHA256 امضا می‌کنیم.

۱. به تنظیمات پروژه بروید و یک Webhook Secret ایجاد کنید.

۲. یک امضای رمزنگاری شده در هدر درخواست با نام x-webhook-signature پیوست خواهد شد.

۳. شما باید در سرور خود، امضا را با استفاده از همان Secret خود محاسبه کرده و با امضای ارسال شده مقایسه کنید.

کد ادغام (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...'));