ওয়েবহুক ব্যাখ্যা: স্বাক্ষরিত পেলোড এবং পুনঃপ্রচেষ্টা
আপনি সবেমাত্র একটি পেমেন্ট গেটওয়ে বা একটি CI/CD সেবা ইন্টিগ্রেট করেছেন, এবং এখন আপনাকে রিয়েল-টাইম ইভেন্টগুলি গ্রহণ করতে হবে। ওয়েবহুক হল স্ট্যান্ডার্ড সমাধান, তবে এগুলির সাথে কিছু সমস্যা আছে: অপ্রমাণিত পেলোড, হারিয়ে যাওয়া ইভেন্ট এবং ডুপ্লিকেট ডেলিভারি। এই নিবন্ধটি ব্যাখ্যা করে কীভাবে ওয়েবহুক কাজ করে, কীভাবে পেলোড স্বাক্ষর করে টেম্পারিং প্রতিরোধ করা যায় এবং নির্ভরযোগ্য ডেলিভারির জন্য কীভাবে পুনঃপ্রচেষ্টা প্রয়োগ করা যায়।
ওয়েবহুক কী?
ওয়েবহুক হল একটি ব্যবহারকারী-সংজ্ঞায়িত HTTP কলব্যাক। আপনার অ্যাপ্লিকেশন আপডেটের জন্য একটি API পোল করার পরিবর্তে, একটি ইভেন্ট ঘটলে প্রদানকারী আপনার নির্দিষ্ট করা URL-এ একটি HTTP POST অনুরোধ পাঠায়। এটি আরও দক্ষ এবং প্রায় রিয়েল-টাইম প্রতিক্রিয়া সক্ষম করে।
সাধারণ ব্যবহারের ক্ষেত্রগুলির মধ্যে রয়েছে:
- পেমেন্ট বিজ্ঞপ্তি (যেমন, Stripe, PayPal)
- CI/CD বিল্ড স্ট্যাটাস (যেমন, GitHub, GitLab)
- মেসেজিং প্ল্যাটফর্ম (যেমন, Slack, Discord)
- CRM আপডেট (যেমন, Salesforce)
ওয়েবহুক পেলোড স্বাক্ষর করবেন কেন?
ওয়েবহুক এন্ডপয়েন্টগুলি সর্বজনীনভাবে অ্যাক্সেসযোগ্য URL। যাচাইকরণ ছাড়া, যে কেউ জাল পেলোড পাঠাতে পারে, যা ডেটা দূষণ বা নিরাপত্তা লঙ্ঘনের দিকে পরিচালিত করে। একটি শেয়ার্ড সিক্রেট দিয়ে পেলোড স্বাক্ষর করা প্রামাণিকতা এবং অখণ্ডতা নিশ্চিত করে।
বেশিরভাগ প্রদানকারী SHA-256 সহ HMAC (হ্যাশ-ভিত্তিক মেসেজ অথেন্টিকেশন কোড) ব্যবহার করে। প্রদানকারী একটি গোপন কী ব্যবহার করে কাঁচা অনুরোধ বডির উপর একটি স্বাক্ষর গণনা করে এবং এটি একটি হেডারে (যেমন, X-Hub-Signature-256) অন্তর্ভুক্ত করে। আপনার সার্ভার স্বাক্ষরটি পুনরায় গণনা করে এবং তুলনা করে।
কীভাবে একটি স্বাক্ষর যাচাই করবেন
এখানে একটি ধাপে ধাপে গাইড:
- কাঁচা বডি পুনরুদ্ধার করুন ঠিক যেমন পাঠানো হয়েছে। যাচাইয়ের আগে এটি পার্স বা পরিবর্তন করবেন না।
- হেডার থেকে স্বাক্ষর বের করুন।
- প্রত্যাশিত স্বাক্ষর গণনা করুন আপনার সিক্রেট দিয়ে HMAC-SHA256 ব্যবহার করে।
- তুলনা করুন টাইমিং আক্রমণ প্রতিরোধ করতে একটি কনস্ট্যান্ট-টাইম ফাংশন ব্যবহার করে।
Node.js-এ উদাহরণ:
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const digest = 'sha256=' + hmac.update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature));
}
Python-এ:
import hmac
import hashlib
def verify_signature(payload, signature, secret):
expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
return hmac.compare_digest(f'sha256={expected}', signature)
তথ্য ফাঁস এড়াতে সর্বদা একটি কনস্ট্যান্ট-টাইম তুলনা ব্যবহার করুন।
নির্ভরযোগ্যতার জন্য পুনঃপ্রচেষ্টা প্রয়োগ
নেটওয়ার্ক ব্যর্থ হয়, সার্ভার পুনরায় চালু হয় এবং ডিপ্লয়মেন্ট ঘটে। একটি শক্তিশালী ওয়েবহুক সিস্টেমকে অবশ্যই ব্যর্থ ডেলিভারি পুনঃপ্রচেষ্টা করতে হবে। প্রদানকারীরা সাধারণত সূচকীয় ব্যাকঅফ সহ পুনঃপ্রচেষ্টা করে, তবে আপনার গ্রহণকারী প্রান্তেও পুনঃপ্রচেষ্টা পরিচালনা করা উচিত।
পুনঃপ্রচেষ্টার কৌশল
- সূচকীয় ব্যাকঅফ: পুনঃপ্রচেষ্টার মধ্যে 1s, 2s, 4s, 8s, ইত্যাদি অপেক্ষা করুন।
- সর্বাধিক প্রচেষ্টা: অসীম লুপ এড়াতে পুনঃপ্রচেষ্টা সীমাবদ্ধ করুন (যেমন, 5টি প্রচেষ্টা)।
- ডেড লেটার কিউ: সর্বাধিক প্রচেষ্টার পরে, ম্যানুয়াল পরিদর্শনের জন্য ইভেন্টটি সংরক্ষণ করুন।
- আইডেম্পোটেন্সি: একই ইভেন্ট একাধিকবার প্রক্রিয়া করলে যেন ডুপ্লিকেট পার্শ্ব প্রতিক্রিয়া না হয় তা নিশ্চিত করুন।
আইডেম্পোটেন্সি কী
অনেক প্রদানকারী একটি অনন্য ইভেন্ট আইডি (যেমন, X-Event-ID) অন্তর্ভুক্ত করে। ডুপ্লিকেট এড়াতে প্রক্রিয়াকৃত আইডিগুলি একটি ডেটাবেস বা ক্যাশে সংরক্ষণ করুন। উদাহরণস্বরূপ, দেখা আইডিগুলি ট্র্যাক করতে TTL সহ Redis ব্যবহার করুন।
তুলনা: পোলিং বনাম ওয়েবহুক
| দিক | পোলিং | ওয়েবহুক |
|---|---|---|
| লেটেন্সি | ব্যবধানের উপর নির্ভর করে | প্রায় রিয়েল-টাইম |
| সার্ভার লোড | উচ্চ (ধ্রুবক অনুরোধ) | কম (শুধুমাত্র ইভেন্টে) |
| জটিলতা | বাস্তবায়ন করা সহজ | এন্ডপয়েন্ট, নিরাপত্তা, পুনঃপ্রচেষ্টা প্রয়োজন |
| নির্ভরযোগ্যতা | পোলের মধ্যে ইভেন্ট মিস করে | এন্ডপয়েন্ট ডাউন থাকলে মিস করতে পারে; পুনঃপ্রচেষ্টা সাহায্য করে |
ওয়েবহুক গ্রাহকদের জন্য সেরা অনুশীলন
- দ্রুত প্রতিক্রিয়া: কয়েক সেকেন্ডের মধ্যে 2xx ফেরত দিন; অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করুন।
- স্বাক্ষর যাচাই করুন: প্রক্রিয়াকরণের আগে সর্বদা যাচাই করুন।
- সবকিছু লগ করুন: ডিবাগিংয়ের জন্য কাঁচা পেলোড এবং হেডার সংরক্ষণ করুন।
- HTTPS ব্যবহার করুন: সাধারণ HTTP-তে ওয়েবহুক কখনই গ্রহণ করবেন না।
- ব্যর্থতা মনিটর করুন: বারবার পুনঃপ্রচেষ্টা ব্যর্থতার জন্য সতর্কতা সেট আপ করুন।
সাধারণ প্রশ্নোত্তর
ওয়েবহুক স্বাক্ষর কী?
একটি ওয়েবহুক স্বাক্ষর হল পেলোডের একটি HMAC হ্যাশ, যা একটি শেয়ার্ড সিক্রেট দিয়ে তৈরি। এটি প্রাপককে যাচাই করতে দেয় যে অনুরোধটি প্রত্যাশিত প্রেরকের কাছ থেকে এসেছে এবং টেম্পার করা হয়নি।
একটি ব্যর্থ ওয়েবহুক কতবার পুনঃপ্রচেষ্টা করা উচিত?
কোনও সর্বজনীন সংখ্যা নেই, তবে সূচকীয় ব্যাকঅফ সহ 3–5 পুনঃপ্রচেষ্টা সাধারণ। এর পরে, ম্যানুয়াল পর্যালোচনার জন্য ইভেন্টটি একটি ডেড লেটার কিউতে লগ করুন।
HTTPS ছাড়া ওয়েবহুক ব্যবহার করা যায় কি?
প্রযুক্তিগতভাবে হ্যাঁ, তবে এটি অত্যন্ত অনিরাপদ। পেলোড এনক্রিপ্ট করতে এবং ম্যান-ইন-দ্য-মিডল আক্রমণ প্রতিরোধ করতে সর্বদা HTTPS ব্যবহার করুন।
আপনার ওয়েবহুক এন্ডপয়েন্টগুলি পরীক্ষা করতে প্রস্তুত? পেলোডগুলি দ্রুত পরিদর্শন এবং যাচাই করতে আমাদের JSON Formatter ব্যবহার করুন।