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. يجب عليك في خادمك حساب التوقيع باستخدام نفس الـ Secret الخاص بك ومقارنته بالتوقيع المرسل.

كود التكامل (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...'));