ওয়েবহুকস ব্যাখ্যা: সাইনড পেলোড এবং রিট্রাই স্ট্র্যাটেজি

Backend2026-10-21TryQuickToolBox

আপনি একটি API তৈরি করেছেন যা আপনার ব্যবহারকারীদের এন্ডপয়েন্টে ওয়েবহুক পাঠায়। কিন্তু তারপর ক্লাসিক সমস্যাগুলির সম্মুখীন হন: কীভাবে নিশ্চিত করবেন যে পেলোডের সাথে ছेড়াছেড়ি করা হয়নি? এন্ডপয়েন্ট ডাউন থাকলে কী হবে? ডুপ্লিকেট প্রসেসিং কীভাবে প্রতিরোধ করবেন? এই নিবন্ধে, আমরা সাইনড পেলোড এবং শক্তিশালী রিট্রাই স্ট্র্যাটেজি দিয়ে এই চ্যালেঞ্জগুলির মোকাবেলা করব।

কেন ওয়েবহুকের সিগনেচার প্রয়োজন

ওয়েবহুক হল HTTP কলব্যাক যা অন্যান্য সিস্টেমকে ইভেন্ট সম্পর্কে অবহিত করে। যেহেতু এগুলি পাবলিক ইন্টারনেটের মাধ্যমে পাঠানো হয়, তাই এগুলি ইন্টারসেপশন এবং স্পুফিংয়ের জন্য ঝুঁকিপূর্ণ। সিগনেচার ছাড়া, একজন দূষিত অভিনেতা আপনার ব্যবহারকারীদের কাছে জাল ওয়েবহুক পাঠাতে পারে, যা অনিচ্ছাকৃত ক্রিয়া ট্রিগার করে। একটি শেয়ার্ড সিক্রেট দিয়ে পেলোড সাইন করা সত্যতা এবং অখণ্ডতা নিশ্চিত করে।

সাইনড পেলোড কীভাবে কাজ করে

সবচেয়ে সাধারণ পদ্ধতি হল HMAC (হ্যাশ-ভিত্তিক মেসেজ অথেন্টিকেশন কোড) SHA-256 সহ। প্রেরক এবং প্রাপক একটি শেয়ার্ড সিক্রেট কী শেয়ার করেন। প্রেরক পেলোডের (এবং কখনও কখনও একটি টাইমস্ট্যাম্প) উপর একটি সিগনেচার গণনা করেন এবং এটি একটি হেডারে অন্তর্ভুক্ত করেন। প্রাপক সিগনেচারটি পুনরায় গণনা করেন এবং প্রাপ্তটির সাথে তুলনা করেন।

ধাপে ধাপে: একটি পেলোড সাইন করা

  1. পেলোড তৈরি করুন: আপনার ইভেন্ট ডেটা JSON-এ সিরিয়ালাইজ করুন। সামঞ্জস্যপূর্ণ ফরম্যাটিং নিশ্চিত করুন (যেমন, অতিরিক্ত হোয়াইটস্পেস নেই) কারণ সিগনেচার সঠিক বাইটের উপর গণনা করা হয়।
  2. একটি টাইমস্ট্যাম্প যোগ করুন: রিপ্লে আক্রমণ প্রতিরোধ করতে পেলোড বা হেডারে একটি ইউনিক্স টাইমস্ট্যাম্প অন্তর্ভুক্ত করুন। প্রাপক কয়েক মিনিটের বেশি পুরানো অনুরোধ প্রত্যাখ্যান করতে পারেন।
  3. HMAC গণনা করুন: পেলোড স্ট্রিং (বা টাইমস্ট্যাম্প + পেলোড) এর HMAC-SHA256 জেনারেট করতে আপনার সিক্রেট কী ব্যবহার করুন।
  4. সিগনেচার সংযুক্ত করুন: এটি X-Signature এর মতো একটি হেডারে পাঠান।

এখানে পাইথনে একটি উদাহরণ:

import hmac
import hashlib
import json
import time

secret = b'your_shared_secret'
payload = {"event": "user.created", "data": {"id": 123}}
body = json.dumps(payload, separators=(',', ':'))
timestamp = str(int(time.time()))
signed_content = timestamp + '.' + body
signature = hmac.new(secret, signed_content.encode(), hashlib.sha256).hexdigest()

# Send headers: X-Signature: signature, X-Timestamp: timestamp

সিগনেচার যাচাই করা

প্রাপকের প্রান্তে, আপনাকে অবশ্যই:

Node.js-এ যাচাইয়ের উদাহরণ:

const crypto = require('crypto');

function verifySignature(req, secret) {
  const signature = req.headers['x-signature'];
  const timestamp = req.headers['x-timestamp'];
  if (!signature || !timestamp) return false;
  if (Date.now() / 1000 - timestamp > 300) return false; // 5 min
  const body = JSON.stringify(req.body);
  const signed = timestamp + '.' + body;
  const expected = crypto.createHmac('sha256', secret).update(signed).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

রিট্রাই স্ট্র্যাটেজি ডিজাইন করা

সিগনেচার থাকা সত্ত্বেও, নেটওয়ার্ক সমস্যা, সার্ভার ত্রুটি বা টাইমআউটের কারণে ওয়েবহুক ব্যর্থ হতে পারে। একটি শক্তিশালী রিট্রাই স্ট্র্যাটেজি প্রাপককে অভিভূত না করে ডেলিভারি নিশ্চিত করে।

মূল বিবেচনা

রিট্রাই প্রয়োগ করা

বেশিরভাগ ওয়েবহুক প্রেরক রিট্রাই শিডিউল করতে একটি কিউ সিস্টেম (যেমন, Redis, RabbitMQ, বা একটি ডাটাবেস) ব্যবহার করেন। এখানে একটি সরলীকৃত প্রবাহ:

  1. ইভেন্ট ট্রিগার হলে, পেলোড এবং লক্ষ্য URL সহ একটি ওয়েবহুক জব এনকিউ করুন।
  2. ওয়ার্কার জবটি তুলে নেয় এবং ডেলিভারি চেষ্টা করে।
  3. যদি প্রতিক্রিয়া স্ট্যাটাস 2xx হয়, সফল হিসাবে চিহ্নিত করুন।
  4. যদি না হয়, সর্বোচ্চ প্রচেষ্টা পর্যন্ত এক্সপোনেন্সিয়াল ব্যাকঅফ সহ একটি রিট্রাই শিডিউল করুন।
  5. সর্বোচ্চ প্রচেষ্টার পরে, ব্যর্থ হিসাবে চিহ্নিত করুন এবং অবহিত করুন।

উদাহরণ রিট্রাই সময়সূচী:

প্রচেষ্টাবিলম্ব
1তাৎক্ষণিক
21 মিনিট
35 মিনিট
430 মিনিট
52 ঘন্টা

ওয়েবহুক সিকিউরিটির জন্য সর্বোত্তম অনুশীলন

সচরাচর জিজ্ঞাসা

একটি সাইনড ওয়েবহুক পেলোড কী?

একটি সাইনড পেলোডে একটি ক্রিপ্টোগ্রাফিক সিগনেচার (সাধারণত HMAC) থাকে যা প্রাপককে প্রেরকের সত্যতা এবং পেলোডের সাথে ছेড়াছেড়ি হয়নি তা যাচাই করতে দেয়।

একটি ব্যর্থ ওয়েবহুক কতবার পুনরায় চেষ্টা করা উচিত?

কোনও একক উত্তর নেই, তবে একটি সাধারণ পদ্ধতি হল এক্সপোনেন্সিয়াল ব্যাকঅফ সহ 3–5 বার রিট্রাই। ইভেন্টের গুরুত্ব এবং প্রাপকের ক্ষমতা বিবেচনা করুন।

ওয়েবহুক সিগনেচারের জন্য JWT ব্যবহার করতে পারি?

হ্যাঁ, JWT ব্যবহার করা যায়, তবে এটি আরও জটিল। HMAC সহজ এবং বেশিরভাগ ক্ষেত্রে যথেষ্ট। JWT উপযোগী যদি আপনাকে সিগনেচারের মধ্যে দাবি বা মেয়াদ অন্তর্ভুক্ত করতে হয়।

আপনার ওয়েবহুক পেলোড পরীক্ষা করতে প্রস্তুত? পাঠানোর আগে আপনার JSON পেলোড যাচাই এবং সুন্দরভাবে প্রিন্ট করতে আমাদের JSON ফরম্যাটার ব্যবহার করুন।