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 = 'your_webhook_secret_here';

// Must parse raw body to verify signature correctly
app.use(express.json());

app.post('/webhook/reotp', (req, res) => {
  const signatureHeader = req.headers['x-webhook-signature'];
  const payloadString = JSON.stringify(req.body);

  // Calculate HMAC SHA256
  const expectedSignature = crypto
    .createHmac('sha256', WEBHOOK_SECRET)
    .update(payloadString)
    .digest('hex');

  // Securely compare signatures
  if (signatureHeader !== expectedSignature) {
    return res.status(401).send('Invalid signature');
  }

  // Handle successful verification
  const { event, phoneNumber, requestId } = req.body;
  if (event === 'verification.success') {
    console.log(`User ${phoneNumber} verified! (ID: ${requestId})`);
    // Login user, create session, update DB, etc.
  }

  // Must return 200 OK so we know it was delivered
  res.status(200).send('OK');
});

app.listen(3000, () => console.log('Listening for Webhooks...'));