ReOTP.
নিরাপত্তা এবং সিঙ্ক্রোনাইজেশন/ওয়েবহুকস এবং HMAC
1 min read

ওয়েবহুকস এবং HMAC

ফোন নম্বর যাচাই করার সময় কীভাবে সুরক্ষিত তাৎক্ষণিক বিজ্ঞপ্তি পাবেন তা জানুন।

ওয়েবহুকস হল দ্রুততম এবং সবচেয়ে নিরাপদ উপায় যে ব্যবহারকারী সফলভাবে যাচাই করেছে তা জানার জন্য, Polling (নিরন্তর চেক) করার প্রয়োজন ছাড়াই।

যখন ব্যবহারকারী বার্তা পাঠায় এবং এটি সফলভাবে মেলে, তখন আমাদের সিস্টেম একটি POST অনুরোধ পাঠায় একটি URL-এ যা আপনি প্রকল্পের সেটিংসে আগে থেকে সেট করেছেন।

ওয়েবহুক নিরাপত্তা (HMAC স্বাক্ষর)

অনুরোধগুলি সত্যিই আমাদের সার্ভার থেকে আসছে এবং কোনো নকল আক্রমণ নয় তা নিশ্চিত করতে, আমরা HMAC-SHA256 অ্যালগরিদম ব্যবহার করে প্রতিটি অনুরোধে স্বাক্ষর করি।

১. প্রকল্পের সেটিংসে যান এবং একটি ওয়েবহুক সিক্রেট তৈরি করুন।

২. x-webhook-signature নামে অনুরোধের হেডারে (Header) একটি এনক্রিপ্টেড স্বাক্ষর সংযুক্ত করা হবে।

৩. আপনার সার্ভারে, আপনার নিজস্ব সিক্রেট ব্যবহার করে স্বাক্ষর গণনা করতে হবে এবং প্রেরিত স্বাক্ষরের সাথে এটি তুলনা করতে হবে।

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