ReOTP.
सुरक्षा और सिंक्रनाइज़ेशन/वेबहुक्स और एचएमएसी
1 min read

वेबहुक्स और एचएमएसी

जानें कि फ़ोन नंबर सत्यापित होने पर सुरक्षित, तात्कालिक सूचनाएं कैसे प्राप्त करें।

वेबहुक्स यह जानने का सबसे तेज़ और सबसे सुरक्षित तरीका है कि उपयोगकर्ता ने पोलिंग (लगातार जाँच) किए बिना सफलतापूर्वक सत्यापित कर लिया है।

जब उपयोगकर्ता संदेश भेजता है और सफलतापूर्वक मिलान हो जाता है, तो हमारा सिस्टम आपके द्वारा प्रोजेक्ट सेटिंग्स में पहले से निर्दिष्ट एक लिंक (यूआरएल) पर POST अनुरोध भेजता है।

वेबहुक सुरक्षा (एचएमएसी सिग्नेचर)

यह सुनिश्चित करने के लिए कि अनुरोध वास्तव में हमारे सर्वर से आ रहे हैं और नकली हमले नहीं हैं, हम HMAC-SHA256 एल्गोरिथम का उपयोग करके प्रत्येक अनुरोध पर हस्ताक्षर करते हैं।

1. प्रोजेक्ट सेटिंग्स पर जाएं और एक वेबहुक सीक्रेट जनरेट करें।

2. एक एन्क्रिप्टेड हस्ताक्षर x-webhook-signature नाम के साथ अनुरोध हेडर में संलग्न किया जाएगा।

3. आपके सर्वर पर, आपको अपने स्वयं के सीक्रेट का उपयोग करके हस्ताक्षर की गणना करनी चाहिए और भेजे गए हस्ताक्षर के साथ उसकी तुलना करनी चाहिए।

Integration Code (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...'));