ReOTP.
سیکیورٹی اور مطابقت پذیری/ویب ہکس (Webhooks) اور HMAC
1 منٹ پڑھنے کے لیے

ویب ہکس (Webhooks) اور HMAC

فون نمبر کی تصدیق ہونے پر محفوظ ریئل ٹائم اطلاعات حاصل کرنے کا طریقہ جانیں۔

Webhooks یہ جاننے کا تیز ترین اور محفوظ ترین طریقہ ہے کہ صارف نے کامیابی کے ساتھ تصدیق کر لی ہے، بغیر SSE (Server-Sent Events) (مسلسل چیک) کی ضرورت کے۔

جب صارف پیغام بھیجتا ہے اور کامیابی سے میچ ہو جاتا ہے، تو ہمارا سسٹم آپ کے پروجیکٹ کی ترتیبات میں پہلے سے طے شدہ URL پر ایک POST درخواست بھیجتا ہے۔

ویب ہک سیکیورٹی (HMAC Signature)

اس بات کو یقینی بنانے کے لیے کہ درخواستیں واقعی ہمارے سرورز سے آ رہی ہیں اور یہ جعلی حملے نہیں ہیں، ہم ہر درخواست کو HMAC-SHA256 الگورتھم کا استعمال کرتے ہوئے دستخط کرتے ہیں۔

1. پروجیکٹ کی ترتیبات میں جائیں اور Webhook Secret تیار کریں۔

2. درخواست کے ہیڈر میں x-webhook-signature کے نام سے ایک انکرپٹڈ دستخط منسلک کیا جائے گا۔

3. آپ کو اپنے سرور پر اپنے Secret کا استعمال کرتے ہوئے دستخط کا حساب لگانا ہوگا اور بھیجے گئے دستخط کے ساتھ اس کا موازنہ کرنا ہوگا۔

انٹیگریشن کوڈ (SDKs)
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...'));