০৪ জুল, ২০২৫·8 মিনিট পড়তে

পার্টনার ইন্টিগ্রেশনে API কী বনাম OAuth 2.0: কী বদলে যায়

API কী বনাম OAuth 2.0: অনবোর্ডিং প্রচেষ্টা, টোকেন রোটেশন, ইউজার-লেভেল অ্যাক্সেস, এবং অডিটযোগ্যতা তুলনা করুন যাতে পার্টনার ডেভেলপাররা নিরাপদে ইন্টিগ্রেট করতে পারে।

পার্টনার ইন্টিগ্রেশনে API কী বনাম OAuth 2.0: কী বদলে যায়

যখন আপনি অথ বেছে নেন, আসলে আপনি যা নির্বাচন করছেন

লোকেরা যখন API কী এবং OAuth 2.0 তুলনা করে, সেটা শুনতে যেমন শুধু নিরাপত্তার আলোচনা মনে হতে পারে। পার্টনার ইন্টিগ্রেশনের ক্ষেত্রে এটা একটি অপারেশনাল সিদ্ধান্তও: পার্টনাররা কত দ্রুত শুরু করতে পারে, পরে আপনি কীভাবে অ্যাক্সেস নিয়ন্ত্রণ করবেন, এবং কিছু ভেঙে গেলে সাপোর্ট কতটা কস্টলি হবে।

অধিকাংশ ইন্টিগ্রেশনের মূল চাহিদা একই: বিশ্বাসযোগ্য অথেনটিকেশন, স্পষ্ট সীমা (রেট লিমিট ও পারমিশন), এবং ট্রেসেবিলিটি যাতে “কে কি করল” প্রশ্নটি অনুমান ছাড়া উত্তর করা যায়। আপনি যে অথ পদ্ধতি বেছে নেন তা নির্ধারণ করে কোনগুলো ডিফল্টভাবে সহজ হবে এবং কোনগুলো আপনাকে অতিরিক্ত নিয়ম, ড্যাশবোর্ড ও ম্যানুয়াল প্রক্রিয়ার মাধ্যমে জোড়াতে হবে।

কিছু সহজ টার্ম আলোচনা বলকে বাস্তবসম্মত রাখে:

  • API key: একটি শেয়ার করা সিক্রেট যা একটি পার্টনার অ্যাপ বা সিস্টেমকে শনাক্ত করে।
  • টোকেন: আপনার API কল করার জন্য সময়-সীমিত ক্রেডেনশিয়াল।
  • স্কোপ: একটি নামকৃত অনুমতি, যেমন “read invoices” বা “create tickets”।

বাস্তব সিদ্ধান্ত হচ্ছে ইন্টিগ্রেশনটি কোন পরিচয়ে কাজ করছে।

যদি এটা মেশিন-টু-মেশিন হয়, সাধারণত API কী ভাল ফিট। উদাহরণ: একটি পার্টনার রাত্রীকালে তাদের সার্ভার থেকে আপনার API-তে সিঙ্ক চালায়। এখানে কোনো end user “Allow” ক্লিক করে না। আপনার সাধারণভাবে পার্টনার-লেভেল অ্যাক্সেস, পূর্বানুমানযোগ্য রোটেশন এবং দ্রুত অনবোর্ডিংকে গুরুত্ব থাকে।

যদি এটা ইউজার-ডেলিগেটেড হয়, OAuth 2.0 সাধারণত উপযুক্ত। উদাহরণ: একজন গ্রাহক পার্টনার অ্যাপে তাদের অ্যাকাউন্ট কানেক্ট করে এবং প্রতিটি গ্রাহক কেবল তাদের নিজস্ব ডেটায় অ্যাক্সেস দেবে। এখানে প্রতি-ব্যবহারকারী পারমিশন, সহজ রিভোকেশন এবং পরিষ্কার অডিট ট্রেইল জরুরি হয়।

এই পছন্দ আপনার সাপোর্ট লোডকে বদলে দেয়। কী-র ক্ষেত্রে আপনি কী শেয়ারিং, রোটেশন সমন্বয় এবং কোন কী কোন পার্টনার এনভায়রনমেন্টে ব্যবহার হচ্ছে তা ট্র্যাক করতে বেশি সময় ব্যয় করবেন। OAuth-এ আপনি কনসেন্ট ফ্লো ও রিডিরেক্ট সেটআপে বেশি সময় দেবেন, কিন্তু কারা বা কোন টেন্যান্ট কোন অ্যাকশন ট্রিগার করেছে তা অনুমান করতে কম সময় লাগবে।

যদি আপনি AppMaster-এর মতো কোনো টুলে ইন্টিগ্রেশন ব্যাকএন্ড তৈরি করেন, অথ শুরুর দিকে প্ল্যান করুন। এটি আপনার ডাটা মডেল (পার্টনার, ইউজার, স্কোপ) এবং সেই অডিট লগগুলিকে প্রভাবিত করবে যেগুলো আপনি প্রথম দিন থেকেই থাকলে ভাল লাগবে।

পার্টনার ইন্টিগ্রেশনে API কী কিভাবে কাজ করে

API কী পার্টনারকে আপনার API কল করার সবচেয়ে সহজ উপায়। কীগুলো সাধারণত স্পিডে জিতেঃ আপনি একটি সিক্রেট স্ট্রিং দেন, পার্টনার সেটি রিকোয়েস্টে যোগ করে, এবং ডেটা এক্সচেঞ্জ শুরু হয়।

একটি কী কী বোঝায়

অধিকাংশ ক্ষেত্রে, একটি API কী একটি পার্টনার অ্যাপ (বা একটি ইন্টিগ্রেশন) প্রতিনিধিত্ব করে, নির্দিষ্ট end user নয়। যদি একটি পার্টনার তাদের পুরো টিম ও সব গ্রাহকের জন্য একটি কী ব্যবহার করে, আপনার সাইড থেকে প্রতিটি রিকোয়েস্ট একইরকম দেখায়: "পার্টনার X"। ফলে সেটআপ সহজ হলেও অ্যাক্সেস সাধারণত কোর্স হয়।

প্রায়ই কীগুলো একটি অ্যাডমিন কনসোল বা একবারের প্রোভিশনিং ধাপের মাধ্যমে ইস্যু করা হয়। পার্টনাররা সেগুলো কনফিগ ফাইল, এনভায়রনমেন্ট ভ্যারিয়েবল বা সিক্রেট ম্যানেজারে রাখে। ঝুঁকি হচ্ছে কী কতবার "অস্থায়ী" ভাবেই কপি হয়ে শেয়ার করা হয়—শীট, চ্যাটে পেস্ট, বা ক্লায়েন্ট-সাইড কোডে এমবেড করে ফেলা।

সীমানাগুলো দ্রুত দেখা যায়। পারমিশনগুলো প্রায়ই প্রশস্ত হয়, কীগুলো শেয়ার করা ক্রেডেনশিয়াল (তাই আপনি নির্ভরযোগ্যভাবে কোনজন কাজ করেছে তা অ্যাট্রিবিউট করতে পারবেন না), রোটেশন সমন্বয় দাবি করে, এবং লিক হওয়া কী আক্রমণকারীর হাতে থাকলে তারা পার্টনার হিসেবে কাজ করতে পারে যতক্ষণ না আপনি তা রিভোক করেন।

উদাহরণ: একটি লজিস্টিকস পার্টনার রাত্রীকালে ইনপোর্ট চালায় তাদের সার্ভার থেকে। একটি API কী ব্যবহার করে তারা অর্ডার.Pull করে এবং স্ট্যাটাস আপডেট করে। কোনো সমস্যা হলে আপনার লগে পার্টনার কীই দেখা যাবে, কিন্তু সেটা কি ছিল একজন ডেভেলপার টেস্ট, একটি নির্ধারিত জব, না একটি কমপ্রোমাইজড মেশিন—সেটা বোঝা যাবে না।

কোথায় API কী এখনও যুক্তিযুক্ত হতে পারে

সার্ভার-টু-সার্ভার ইন্টিগ্রেশনের জন্য যেখানে কিছু স্থিতিশীল কাজ থাকে এবং আপনি কী-কে নির্দিষ্ট IP, এন্ডপয়েন্ট বা এনভায়রনমেন্ট (টেস্ট বনাম প্রোডাকশন) এর সঙ্গে সীমাবদ্ধ করতে পারেন, সেখানে কীগুলো ভাল কাজ করতে পারে। যদি আপনি AppMaster-এর মতো টুলে API লেয়ার বানান, কীগুলো দ্রুত পার্টনার ট্রায়ালের জন্য প্রথম ধাপে ভালো হতে পারে। শুধু লাইভ যাওয়ার আগে কী রোটেশন ও রিভোকেশন কিভাবে করবেন সেটা ঠিক করে নিন।

OAuth 2.0 কিভাবে কাজ করে (পাঠ্যবই ছাড়াই)

OAuth 2.0-এর মূল উদ্দেশ্য হলো ডেলিগেটেড অ্যাক্সেস। এটি পার্টনার অ্যাপকে নির্দিষ্ট একজন ব্যবহারকারীর পক্ষ থেকে API কল করতে দেয়, ব্যবহারকারীর পাসওয়ার্ড না দিলে এবং পার্টনারকে স্থায়ী, সীমাহীন অ্যাক্সেস না দিলে।

এটাকে ভাবুন তিনজন পক্ষে একটি পারমিশন হ্যান্ডশেক হিসেবে:

  • User (resource owner): যার ডেটা অ্যাক্সেস করা হচ্ছে।
  • Partner app (client): পার্টনার যে ইন্টিগ্রেশন বানাচ্ছে।
  • Your auth system (authorization server): যে সিস্টেম ব্যবহারকারীকে ভেরিফাই করে, সম্মতি নেয় এবং টোকেন ইস্যু করে।

ব্যবহারকারী সম্মত হলে পার্টনার অ্যাপ পায় একটি access token। এটি হলো স্বল্প-মেয়াদী ক্রেডেনশিয়াল যা অ্যাপ আপনার API-তে পাঠায় এখনই অনুমতি আছে প্রমাণ করতে। এক্সেস টোকেন দ্রুত মেয়াদোত্তীর্ণ করার উদ্দেশ্যে রাখা হয় যাতে লিক হলে বিস্তার সীমিত থাকে।

ব্যবহারকারীকে বারবার অনুমতি না চাইতে অনেক সেটআপে refresh token ব্যবহার করা হয়। রিফ্রেশ টোকেন দীর্ঘস্থায়ী এবং কেবল নতুন এক্সেস টোকেন পেতে ব্যবহার করা হয়। সহজ মডেলে: access token API কলের জন্য, refresh token নতুন access token পাওয়ার জন্য।

স্কোপগুলোই OAuth-কে ব্যবহারিক করে তোলে। একটি স্কোপ নামকৃত অনুমতির সীমানা, যেমন “read:invoices” বা “write:customers”। কনসেন্ট সময় ব্যবহারকারী দেখে পার্টনার অ্যাপ কী চাইছে এবং আপনার সিস্টেম কি অনুমোদিত হয়েছে তা রেকর্ড করে। আপনার API প্রতিটি অনুরোধে স্কোপ চেক করে এবং অনুমোদিত সীমা ছাড়িয়ে গেলে কল রিজেক্ট করে।

উদাহরণ: একটি CRM পার্টনার কনটাক্ট সিঙ্ক করতে চায়। আপনি পার্টনারকে শুধুমাত্র “read:contacts” এবং “write:contacts” অনুরোধ করতে বললে, পরে তারা যদি ডিলিট করার চেষ্টা করে API তা ব্লক করবে যদি “delete:contacts” স্পষ্টভাবে অনুমোদিত না থাকে। অনুশীলনে এটিই বড় পার্থক্য: OAuth least-privilege প্রয়োগ সহজ করে।

অনবোর্ডিং: বহিরাগত ডেভেলপারদের প্রথম-দিনের অভিজ্ঞতা

API কী-তে অনবোর্ডিং প্রায় দ্রুতই হতে পারে। পার্টনার একটি কী চায়, আপনি দেয় (সাধারণত পার্টনার পোর্টাল বা ইমেলে), এবং তারা হেডারে যোগ করে কল শুরু করে। টাইম-টু-ফার্স্ট-কল প্রায় মিনিটেই হতে পারে, যা পার্টনার টিমের জন্য ভাল অনুভূত হয় যখন তারা দ্রুত ইন্টিগ্রেশন প্রমাণ করতে চায়।

এই গতি একটি ট্রেডঅফ নিয়ে আসে: প্রথম দিনেই “কে কল করছে” এভাগ থাকে। যদি একই কী পুরো টিমে শেয়ার করা হয়, আপনি দ্রুত একটি কাজ করা ডেমো পেতে পারেন, কিন্তু শুরুর দিকে টেস্ট বনাম প্রোডাকশন, least privilege, এবং কোনো সমস্যা হলে স্পষ্ট মালিকানা ঠিক করা কঠিন হয়।

OAuth অনবোর্ডিং ভারী মনে হতে পারে কারণ প্রথম কলের আগে আরও অনেক চাহিদা থাকে। পার্টনার সাধারণত একটি অ্যাপ রেজিস্টার করতে হয়, redirect URI সেট করতে হয়, এবং টেস্ট ইউজার বা স্যান্ডবক্স অ্যাকাউন্ট ব্যবহার করতে হয়। প্রথম কলে ঘণ্টা বা দিন সময় লাগতে পারে—এটা OAuth অদ্ভুততার কারণে না, বরং ছোট কনফিগারেশন ইস্যু বড় বিলম্ব তৈরি করে।

সবচেয়ে সাধারণ প্রথম-দিন ব্লকারগুলো হচ্ছে redirect URI mismatch, authorization code-কে access token ভেবে ফেলা, এনভায়রনমেন্ট মিশিয়ে ফেলা (টেস্ট ক্রেডেনশিয়াল প্রোডাকশনে ব্যবহার), ভুল স্কোপ, এবং টেস্ট ইউজার তৈরি/রিসেট করার সরল উপায় না থাকা।

ডকুমেন্টেশন OAuth-এর জন্য বেশি গুরুত্বপূর্ণ। API কী-এর জন্য ছোট "কপি কী, হেডারে যোগ কর, এন্ডপয়েন্ট কল কর" গাইড যথেষ্ট থাকতে পারে। OAuth-এর জন্য পার্টনারদের একটি চেকলিস্ট এবং একটি কার্যকর স্যাম্পল দরকার যা তারা চালাতে পারে।

আপনি যদি AppMaster-এ পার্টনার টুলিং বানান, একটি ছোট স্টার্টার অ্যাপ (ওয়েব UI প্লাস একটি ব্যাকএন্ড প্রক্সি) পার্টনারদের কোড লিখে খুব বেশি না করে OAuth ফ্লোটি এন্ড-টু-এন্ড সম্পন্ন করতে সাহায্য করতে পারে, একই সময়ে নিরাপত্তার মডেলটাও প্রথম দিন থেকেই পরিষ্কার রাখে।

বাস্তব জগতের টোকেন রোটেশন ও রিভোকেশন

Get production-ready source code
Generate real source code for your backend and keep full control over hosting and reviews.
Export Code

রোটেশন সহজ শোনায় যতক্ষণ না আপনি মনে করেন পার্টনারদের ক্রন জব, একাধিক এনভায়রনমেন্ট, এবং কেউ যে সিক্রেটটি স্প্রেডশীটে পেস্ট করে রেখে দিয়েছে। বাস্তব প্রশ্নটি “আমরা রোটেট করতে পারি কি?” নয়, বরং “আমরা কি প্রোডাকশন ভাঙা ছাড়া রোটেট করতে পারব?”

API কী-তে রোটেশন বেশিরভাগই সমন্বয়ের বিষয়। একটি নিরাপদ প্যাটার্ন হচ্ছে ডুয়াল কী সাথে ওভারল্যাপ উইন্ডো: আপনি নতুন কী ইস্যু করেন, একটি ক্ষুদ্র সময় উভয় কীকে অনুমোদন রাখেন, তারপর পার্টনার নিশ্চিত করলে পুরনো কী নিষ্ক্রিয় করেন। বিপরীতে জরুরি রিভোক: কী লিক হলে আপনি এক ক্লিকে তা মেরে ফেলতে চান, রিলিজের জন্য তাদের উপর নির্ভর না করে।

প্রায়োগিকভাবে, কাজ করার মতো কী রোটেশনে সাধারণত থাকে প্রতিটি পার্টনারের জন্য দুইটি অ্যাক্টিভ কী (বর্তমান ও পরবর্তী), প্রতিটি এনভায়রনমেন্টের জন্য আলাদা কী (dev, staging, prod), পরিষ্কার লেবেলিং যাতে জানা যায় কোন সিস্টেম কী ব্যবহার করছে, এবং তাৎক্ষণিক রিভোকেশনের একটি টেস্ট করা ইনসিডেন্ট পথ।

OAuth রোটেশন বেশি স্বয়ংক্রিয় যদি আপনি স্বল্প-মেয়াদী access token ব্যবহার করেন। access token দ্রুত মেয়াদোত্তীর্ণ রেখে আপনি রিফ্রেশ টোকেনের ওপর নির্ভর করে নতুন করে দেয়, যা রিস্ক কমায় যখন আপনাকে অ্যাক্সেস কাটা দরকার। রিভোকেশনের ফোকাস থাকে রিফ্রেশ টোকেনে: একবার তা রিভোক করলে পার্টনার নতুন access token মেন্ট করতে পারে না।

কঠিন অংশ হচ্ছে পলিসি: রিফ্রেশ টোকেন কতদিন থাকবে, সেগুলো পুনরায় ব্যবহারযোগ্য কিনা, এবং কোন ট্রিগারগুলো পুনরায় অথентиকেশন দাবি করে (পাসওয়ার্ড রিসেট, অ্যাডমিন রিমুভ, সন্দেহজনক কার্যকলাপ)। দ্রুত incident response চাইলে access token ছোট রাখুন এবং রিফ্রেশ-টোকেন রিভোকেশন নির্ভরযোগ্য ও তাৎক্ষণিক রাখুন।

একটি সাধারণ ইনসিডেন্ট: পার্টনারের সার্ভার লগে দুর্ঘটনাক্রমে ক্রেডেনশিয়াল লগ হয়েছে। API কী হলে আপনি কী রিভোক করেন এবং ইন্টিগ্রেশন তৎক্ষণাৎ বন্ধ হয়ে যায়, তারপর নতুন কী ইস্যু করে আপডেট সমন্বয় করতে হয়। OAuth হলে আপনি ঐ পার্টনার বা ব্যবহারকারীর রিফ্রেশ টোকেন রিভোক করেন, এবং বিদ্যমান access tokenগুলো শীঘ্রই মেয়াদোত্তীর্ণ হবে, সাধারণত হঠাৎ ডাউনটাইম ছাড়াই।

ইউজার-লেভেল অ্যাক্সেস: প্রতি-ব্যবহারকারী, প্রতি-পার্টনার, না উভয়ই?

Launch a safer partner sandbox
Create a sandbox-style environment so partners can test without touching production data.
Set Up Now

আপনি যদি কেবল জানতে চান কোন কোম্পানি আপনার API কল করছে, পার্টনার-লেভেল আইডেন্টিটি যথেষ্ট হতে পারে। কিন্তু যখন পার্টনার অনেক end user (এজেন্ট, ম্যানেজার, কাস্টমার) এর পক্ষ থেকে কাজ করে, তখন স্পষ্ট ইউজার কন্টেক্সটও দরকার।

API কী-র সঙ্গে সাধারণ প্যাটার্ন হচ্ছে প্রতিটি পার্টনারের জন্য একটি সিক্রেট। ইউজার কন্টেক্সট তারপর তিনভাবে জোড়া হতে পারে: কোনো ইউজার নেই (সবকিছু পার্টনার হিসেবে দেখা যায়), হেডারে বা ফিল্ডে পাঠানো একটি ইউজার আইডি, অথবা ইম্পার্সনেশন-স্টাইল ফ্লো যেখানে পার্টনার একটি আপনার দেওয়া ইউজার আইডি সাইন করে। এগুলো কাজ করতে পারে, কিন্তু আপনি পার্টনার পাঠানো কোনো ইউজার আইডিকে অবিশ্বসনীয় হিসেবে আচরণ করবেন যদি না আপনি সেটা যাচাই করতে পারেন।

OAuth ইউজার-লেভেল অ্যাক্সেসের জন্য তৈরি। প্রতিটি ব্যবহারকারী অনুমতি দেয় এবং স্কোপগুলো সীমা নির্ধারণ করে। এতে least privilege প্রয়োগ সহজ হয়: ইন্টিগ্রেশন কনটাক্ট পড়তে পারে কিন্তু ইনভয়েস এক্সপোর্ট করতে পারবে না, অথবা টিকিট আপডেট করতে পারবে কিন্তু অ্যাডমিন সেটিং বদলাতে পারবে না।

যখন পার্টনার অনেক ব্যবহারকারীর পক্ষ থেকে কাজ করে, পারমিশন মডেল কিভাবে করবেন

সহজভাবে পরিচয় ও অনুমতি আলাদা রাখুন: পার্টনার পরিচয় (কে ইন্টিগ্রেট করছে), ইউজার পরিচয় (কার পক্ষে অ্যাকশন), রোল (পণ্যের ভেতর ওই ব্যবহারকারী কী করতে পারে), এবং স্কোপ (পার্টনার ওই ব্যবহারকারীর পক্ষ থেকে কী করতে পারে)।

উদাহরণ: একটি হেল্পডেস্ক পার্টনার ২০০ এজেন্টের জন্য টিকিট সিঙ্ক করে। যদি আপনি একটি কী ব্যবহার করে থাকেন, প্রতিটি অ্যাকশন লগে “Partner A” হিসেবে দেখা যাবে। OAuth থাকলে প্রতিটি এজেন্টের আলাদা গ্রান্ট থাকতে পারে—তাই "Agent Maria updated ticket 1832 via Partner A" সম্ভব হয়।

যখন আপনাকে উভয়ই দরকার, পার্টনার-লেভেল ক্লায়েন্ট আইডেন্টিটি প্লাস ইউজার ডেলিগেশন ব্যবহার করুন (OAuth টোকেন ইউজার-টিক করা)। AppMaster-এর মতো টুলে এটি একটি auth মডিউল, পার্টনার রেকর্ড, ও বিজনেস লজিকে পারমিশন চেক হিসেবে পরিষ্কারভাবে ম্যাপ হয়।

অডিটযোগ্যতা ও ট্রাবলশুটিং: কে কি করল?

পার্টনার ইন্টিগ্রেশনে কিছু ভুল গেলে কঠিন অংশ সাধারণত বাগ ঠিক করা নয়—কি ঘটেছিল তার প্রমাণ দেখানো।

API কী-তে অনেক টিম shared identity সমস্যায় পড়েন। একক কী প্রায়ই "পার্টনার" প্রতিনিধিত্ব করে, নির্দিষ্ট ব্যক্তি বা অ্যাপ ইনস্ট্যান্স নয়। আপনি লগ করতে পারেন যে রিকোয়েস্ট কী A দিয়ে এসেছে, কিন্তু সাধারণত প্রমাণ করা কঠিন যে কোন end user এটি ট্রিগার করেছে, বা তা একজন কর্মচারী, একটি স্ক্রিপ্ট, না কীটি লিক হয়ে গেছে। যদি পার্টনার কীটি একাধিক সিস্টেমে কপি করে, আপনার সব লগ একইরকম দেখাবে।

OAuth আপনাকে পরিষ্কার ট্রেইল দেয়: কোন ব্যবহারকারী কোন ক্লায়েন্ট অ্যাপকে অনুমোদন করেছে, কখন করেছে, এবং কী স্কোপ অনুমোদিত ছিল। যদি পার্টনারের অ্যাপ কমপ্রোমাইজ হয়, আপনি প্রায়ই প্রভাবকে একটা client_id বা এমনকি তাদের অনুমোদন করা ব্যবহারকারীর সাবসেট পর্যন্ত সীমাবদ্ধ করতে পারেন।

সিকিউরিটি রিভিউ বা কমপ্লায়েন্স কাজের জন্য যে অডিট প্রশ্নগুলো আসবে: কোন ব্যবহারকারীর ডেটা কোন পার্টনার অ্যাপ দ্বারা এবং কোন স্কোপের অধীনে অ্যাক্সেস করা হয়েছে; কখন অ্যাক্সেস ইস্যু হয়েছিল এবং সর্বশেষ ব্যবহৃত হয়েছিল; কলগুলো কোথা থেকে এসেছে (IP, এনভায়রনমেন্ট); কিছু অনুমোদিত স্কোপের বাইরে গিয়েছে কি না; এবং আপনি কি একটি ব্যবহারকারীর জন্য অ্যাক্সেস রিভোক করতে পারেন বাকি ইন্টিগ্রেশন বন্ধ না করে—এসব।

ট্রাবলশুটিং দ্রুত করার জন্য, প্রতিটি রিকোয়েস্টে কিছু ফিল্ড ধরুন (অথরিটি টাইপ যাই হোক): client_id (বা key id), subject (user id, যদি থাকে), scope, IP ঠিকানা, এবং একটি ইউনিক request ID যা রেসপন্সে ফেরত দেন। টাইমস্ট্যাম্প ও আউটকাম (success, denied, rate limited) যোগ করুন যাতে ইনসিডেন্ট টাইমলাইন মিনিটেই রিকনস্ট্রাক্ট করা যায়।

নিরাপত্তা ও সাপোর্ট সমস্যার সাধারণ ভুলগুলো

Give partners a cleaner onboarding
Create a simple web portal for issuing, rotating, and revoking partner credentials.
Build Portal

বেশিরভাগ পার্টনার অথ ইনসিডেন্ট "অ্যাডভান্সড হ্যাক" নয়। এগুলো ছোট সিদ্ধান্ত থেকে আসে যা সিক্রেট লিক করা সহজ বা প্রতিস্থাপন কঠিন করে।

API কী সমস্যা সাধারণত থাকে কী কোথায় শেষ পর্যন্ত চলে যায়—পার্টনার এটাকে মোবাইল বা ব্রাউজার অ্যাপে রাখে, পরে লগ, স্ক্রিনশট বা চ্যাট থেকে কপি হয়ে যায়। আরেকটি সাধারণ সমস্যা কীকে স্থায়ী ধরে রাখা; রোটেশন প্ল্যান না থাকলে টিমগুলো পরিবর্তন এড়ায় এমনকি কেউ চলে গেলেও বা একটি রেপো এক্সপোজ হলে।

OAuth ব্যর্থতা একটু ভিন্ন। শীর্ষ সাপোর্ট টিকিটটি হলো redirect URI mismatch: স্টেজিং-এ কাজ করে কিন্তু প্রোডাকশনে ভেঙে যায় এবং ডেভেলপার বুঝতে পারে না কেন। পরেরটি হলো অত্যধিক বিস্তৃত স্কোপ—"কাজ করাবার জন্য সবকিছু দেয়"—যা পরে সিকিউরিটি রিভিউ সমস্যায় পরিণত হয়। কনসেন্ট স্ক্রিনের বিভ্রান্তিকর টেক্সটও churn সৃষ্টি করে যখন ব্যবহারকারীরা পারমিশনগুলো সেই ফিচারের সাথে মেলে না দেখে বিভ্রান্ত হয়।

ট্র্যাপ দুই পদ্ধতিতেই আছে। দীর্ঘ-মেয়াদী সিক্রেট ও টোকেন বিস্তারের সম্ভাবনা বাড়ায়। অনুপস্থিত রেট লিমিট একটি বাগকে আউটেজে পরিণত করতে পারে। রিপ্লে প্রতিরোধ (উদাহরণ: একই সাইন করা রিকোয়েস্ট দু’বার নেওয়া) না থাকলে দ্বিগুণ চার্জ বা রেকর্ড তৈরির ঝুঁকি থাকে।

সাপোর্ট সমস্যাগুলো প্রায়ই স্ব-সৃষ্ট। যদি এরর মেসেজগুলো অস্পষ্ট ("unauthorized") হয়, পার্টনার সমস্যাটা নিজে ফিক্স করতে পারবেন না এবং এসক্যালেট করতে হবে। যদি আপনি স্যান্ডবক্স না দেন এবং ধারাবাহিক এনভায়রনমেন্ট না রাখেন, পার্টনাররা ভুল করে প্রোডাকশনে টেস্ট করতে পারেন।

অনবোর্ডিং পূর্বে গার্ডরেল চাইলে, সেগুলো সহজ রাখুন:

  • সিক্রেট সার্ভারে রাখুন শুধুমাত্র, কখনো ক্লায়েন্ট অ্যাপে বা শেয়ার্ড চ্যানেলে না।
  • রোটেশন ও রিভোকেশন এগ্রিমেন্টের অংশ রাখুন, ডেডলাইন ও ওনার কন্টাক্ট সহ।
  • সাদাসিধে ভাষায় পারমিশন নাম ব্যবহার করে স্পষ্ট স্কোপ দিন।
  • রাইট অ্যাকশনের জন্য রেট লিমিট ও idempotency বা রিপ্লে চেক যোগ করুন।
  • বাস্তবসম্মত ডেটা ও পূর্বানুমানযোগ্য কনফিগসহ একটি স্যান্ডবক্স অফার করুন।

আপনি যদি AppMaster-এর মতো টুলে ইন্টিগ্রেশন ব্যাকএন্ড বানান, এই নিয়মগুলো আপনার auth মডিউলে এবং এরর রেসপন্সে প্রথম দিকেই বেক করুন, যাতে পার্টনারা ভরসা করে।

পার্টনার টিমের জন্য একটি বাস্তবসম্মত সিদ্ধান্ত নির্দেশিকা

টেকনোলজির আগে আপনার প্রয়োজনীয় আউটকাম থেকে শুরু করুন। আসল পছন্দটা হলো আপনি একটি একক ইন্টিগ্রেশন (একটি সার্ভিস পরিচয়) অথরাইজ করছেন কি, না কি বিভিন্ন পারমিশনসহ বাস্তব ব্যবহারকারীদের।

যদি পার্টনাররা ব্যক্তিগত ব্যবহারকারীদের পক্ষ থেকে কাজ করে, OAuth 2.0 সাধারণত নিরাপদ ডিফল্ট। এটি কলগুলোকে একজন ব্যক্তির সঙ্গে জোড়তে দেয়, কী করতে পারবে তা সীমাবদ্ধ করে, এবং পুরো পার্টনার ইন্টিগ্রেশনটি ভাঙানো ছাড়া অ্যাক্সেস কাটা যায়।

যদি ইন্টিগ্রেশন সত্যিই সার্ভার-টু-সার্ভার এবং অ্যাক্সেস স্থির থাকে, API কী যথেষ্ট হতে পারে। উদাহরণ: "Partner X রাত্রীকালীন স্টক আপডেট পাঠায়"—এখানে কোনো মানুষিক কন্টেক্সট নেই এবং একই কাজ বারবার হয়।

দ্রুত রিস্ক ও অপস চেক:

  • যদি আপনাকে ব্যবহারকারী-নির্দিষ্ট পারমিশন দরকার (উদাহরণ: "Alice শুধু তারই কাস্টমার দেখতে পারবে"), OAuth বেছে নিন।
  • যদি এটি একটি একক স্থির ওয়ার্কফ্লো যেখানে অ্যাক্সেস স্থিতিশীল, কী কাজ করবে, যদি আপনি তা নিরাপদে রোটেট করতে পারেন।
  • যদি ডেটা সংবেদনশীল (PII, পেমেন্ট, হেলথ, ফাইন্যান্স), OAuth-এ ঝুঁকির দিক কম—আপনি স্কোপ সীমাবদ্ধ করে ও ব্যবহারকারীভিত্তিক অডিট করতে পারবেন।
  • যদি পার্টনারের পরিপক্কতা কম (কীগুলো শেয়ার হবে), OAuth বিস্তারকে কমায়।
  • যদি আপনি উচ্চ ভলিউম ও বৃদ্ধি আশা করেন, এমন পন্থা বেছে নিন যা রিভোকেশন ও ট্রাবলশুটিংকে সহজ করে।

আপনাকে যদি উভয় পদ্ধতি সাপোর্ট করতে হয়, পরিষ্কার সীমা নির্ধারণ করুন। উদাহরণ: ব্যাক-অফিস ব্যাচ জবগুলোর জন্য API কী, যে কোনো ফিচারের জন্য যা ব্যবহারকারীর অ্যাকাউন্ট স্পর্শ করে OAuth ব্যবহার করুন। কোন এন্ডপয়েন্ট কোন পদ্ধতি গ্রহণ করে এবং অ্যাক্সেস রিভোক হলে কী হয় তা ডকুমেন্ট করুন।

কংক্রিট উদাহরণ: একটি CRM পার্টনার লিড ইমপোর্ট করতে চায়। তারা যদি রাত্রীকালীন এক কোম্পানি অ্যাকাউন্টে জব চালায়, API কী ঠিক আছে। যদি সেলস রিপস তাদের নিজ নিজ অ্যাকাউন্ট কানেক্ট করে এবং কেবল তাদের নিজ পাইলাইন দেখবে, OAuth উপযুক্ত।

পার্টনারদের লাইভ করার আগে দ্রুত চেকলিস্ট

Draft the OAuth flow clearly
Map OAuth consent and token checks as drag-and-drop logic you can review with your team.
Create Flow

প্রোডাকশনে অ্যাক্সেস খোলার আগে অথকে একটি অপারেশনাল সিস্টেম হিসেবে বিবেচ্য করুন, শুধুমাত্র একটি চেকবক্স নয়। পার্টনার ইন্টিগ্রেশনের বড় সাপোর্ট ফায়ারগুলো অনির্দিষ্ট ক্রেডেনশিয়াল, অস্পষ্ট পারমিশন, এবং অনুপস্থিত লগ থেকে শুরু হয়।

নিরাপত্তা ও অ্যাক্সেস

একটি স্পষ্ট ইস্যু পাথ নির্বাচন করুন। API কী বা OAuth যাই ব্যবহার করুন না কেন, go-live চেকগুলো মিল একই রকম: কে ক্রেডেনশিয়াল পাবে, তারা কী করতে পারবে, এবং আপনি কতো দ্রুত তা বন্ধ করতে পারবেন।

পার্টনার টিমের জন্য বেসিকগুলো লিখে রাখুন: কে অ্যাক্সেস অনুমোদন করে এবং কিভাবে পার্টনার পরিচয় যাচাই করবেন; মেয়াদ, রোটেশন কিভাবে কাজ করবে এবং যদি রোটেশন মিস হয় কি ভেঙে যাবে; একটি টেস্ট করা “kill switch” যা এক পার্টনার (বা এক ব্যবহারকারী) কে নিষ্ক্রিয় করতে পারে সবাইকে না নামিয়ে; নির্ধারিত পারমিশন এবং least-privilege ডিফল্ট ও পরিষ্কার কনসেন্ট টেক্সট; এবং একটি স্যান্ডবক্স টেস্ট ক্রেডেনশিয়াল, বাস্তবসম্মত ডেটা, ও পূর্বানুমানযোগ্য রেট লিমিট সহ।

একটি বাস্তবতা পরীক্ষা: যদি একটি পার্টনারের API কী পাবলিক রিপোতে লিক করে, আপনি কি সেটি মিনিটের মধ্যে রিভোক করতে, বিস্তার নির্ধারণ করতে, এবং ম্যানুয়াল ডাটাবেস সম্পাদনা ছাড়া নতুন কী ইস্যু করতে পারবেন?

অপারেশনস ও সাপোর্ট

নিশ্চিত করুন আপনি “কি ঘটল?” প্রশ্নের জবাব প্রমাণ সহ দিতে পারবেন। প্রত্যেক অনুরোধে লগ থাকা উচিত যে কে কল করেছে (পার্টনার id, ব্যবহারকারী id যদি থাকে), তারা কী চেষ্টা করেছে (এন্ডপয়েন্ট, স্কোপ), এবং সিস্টেম কী সিদ্ধান্ত নিল (status code, error reason)।

এছাড়াও নিশ্চিত করুন: পরিষ্কার এরর মেসেজ আছে যা পার্টনারকে বলে কি ঠিক করতে হবে (missing scope, expired token, invalid signature), রেট লিমিট আছে যা আপনাকে রক্ষা করবে কিন্তু পার্টনারকে আচমকা না করবে, এবং একটি ঘটনা প্লেবুক আছে যেটি অ্যাক্সেস থামানো ও প্রভাবিত পার্টনারদের নোটিফাই করার নির্দেশ দেয়।

আপনি যদি AppMaster-এ পার্টনার API বানান, এই ফিল্ড ও চেকগুলো শুরুতেই সেট করুন যাতে আপনার জেনারেটেড ব্যাকএন্ড ও লগ রিকোয়েস্ট অনুযায়ী ধারাবাহিক থাকে।

একটি বাস্তবসম্মত উদাহরণ: CRM পার্টনার ইন্টিগ্রেশন

Enforce least privilege in logic
Add permission checks and scope validation where your business rules actually live.
Build Backend

ধরা যাক একটি পার্টনার CRM সেটি আপনার প্রোডাক্টে কন্টাক্ট সিঙ্ক করে বহু গ্রাহকের জন্য। প্রতিটি গ্রাহকের একাধিক দল আছে, এবং সব দল একই কন্টাক্ট দেখা উচিত নাও হতে পারে। CRM বিক্রেতা একটি পুনরায় ব্যবহারযোগ্য ইন্টিগ্রেশন চাইছে, আর আপনি চান কম সাপোর্ট টিকিট ও পরিষ্কার রেকর্ডস যে কে কি পরিবর্তন করেছে।

API কী-এ অনবোর্ডিং সহজ: আপনি পার্টনারকে কী দেন, তারা কন্টাক্ট পুশ করা শুরু করে। সমস্যা দেখা দেয় এক সপ্তাহ পরে, যখন কোনো গ্রাহক প্রশ্ন করে—"Sales সিঙ্ক করতে পারবে, কিন্তু Support পারবে না কি?" একটি কী তখন মাস্টার পাসে পরিণত হয়ে যায়।

এই সেটআপে API কী-র সীমাগুলো স্পষ্ট: প্রবেশাধিকার প্রায়ই এক-বা-সব (so you create extra keys per customer, team, or environment), লিক হলে রোটেশন সারাবিশ্বে প্রয়োজন, অ্যাট্রিবিউশন দুর্বল কারণ কী পার্টনার অ্যাপকে প্রতিনিধিত্ব করে না একটি ব্যক্তিকে, এবং "একজন ব্যবহারকারীর জন্য বন্ধ কর" সাধারণত পুরো কী নিষ্ক্রিয় করা ছাড়া সম্ভব নয়।

OAuth-এ পার্টনার CRM প্রতিটি কাস্টমারের অ্যাডমিনকে কনসেন্ট স্টেপে পাঠায়। আপনি কেবল কনটাক্ট সিঙ্কের প্রয়োজনীয় স্কোপই চাইতে পারেন (read contacts, write contacts, না বিলিং, না অ্যাডমিন সেটিংস)। এই ছোট স্কোপ অনেক “কেন তারা এটা দেখতে পারে?” টিকিট আটকায়।

দৈনন্দিন অপারেশনগুলো OAuth-এ সাধারণত পরিষ্কার থাকে: আপনি এক কাস্টমার (বা এমনকি এক ব্যবহারকারী) এর জন্য অ্যাক্সেস রিভোক করতে পারেন বাকি ইন্টিগ্রেশন ভাঙানো ছাড়া, স্বল্পমেয়াদী access token বিস্তার সীমিত করে, এবং অডিট লগগুলো একটি ক্লায়েন্ট, একটি কাস্টমার, এবং প্রায়ই একটি নির্দিষ্ট ব্যবহারকারীর পরিচয়ের সঙ্গে কার্যক্রম জোড়তে পারে।

আপনি যদি AppMaster-এর মতো প্ল্যাটফর্মে এটি বানান, আপনার ডাটা মডেল এমনভাবে ডিজাইন করুন যাতে প্রতিটি সিঙ্ক করা কন্টাক্ট আপডেটে পার্টনার অ্যাপ, কাস্টমার অ্যাকাউন্ট, এবং কাজ করা ব্যবহারকারী (OAuth ব্যবহার করলে) রেকর্ড হয়। এতে "রাতারাতি কন্টাক্ট ডুপ্লিকেট" তদন্ত করা অনেক সহজ হবে।

পরবর্তী ধাপ: একটি নিরাপদ পার্টনার ইন্টিগ্রেশন চালু করুন

আপনার ইন্টিগ্রেশন দুটি ছোট গল্প হিসেবে লিখে রাখুন: সুখী পথ (ক্রেডেনশিয়াল পান, একটি এন্ডপয়েন্ট কল করেন, ডেটা দেখেন) এবং ব্যর্থ পথ (expired token, missing scope, ভুল অ্যাকাউন্ট)। ঐ এক পাতা অনেক সাপোর্ট সময় বাঁচায় কারণ পার্টনাররা স্ব-রূপে নির্ণয় করতে পারে।

একজন পাইলট পার্টনার দিয়ে ছোট শুরু করুন। বাস্তব ট্রাফিক দ্রুত বলে দেবে আপনি কী মিস করেছেন: কোন এন্ডপয়েন্টে স্পষ্ট স্কোপ দরকার, কোন এররগুলোতে ভালো মেসেজ প্রয়োজন, এবং কী লগ রাখা দরকার দ্রুত প্রশ্নের উত্তর দিতে।

যদি আপনি নিজস্ব ইন্টিগ্রেশন প্ল্যাটফর্ম বানান, প্রথম সংস্করণটি সরল রাখুন। AppMaster-এর মতো টুলগুলো(auth flows, APIs, audit-friendly backends) দ্রুত তৈরি করতে সাহায্য করে, সবকিছু হ্যান্ড-কোড না করেও। যদি আপনি প্ল্যাটফর্মটি পরীক্ষা করতে চান, AppMaster appmaster.io-তে উপলব্ধ।

এখানে একটি ব্যবহারিক চেকলিস্ট যা “চলছে” থেকে “নিরাপদ ও সাপোর্টেবল” এ নিয়ে যাবে:

  • একটি ডিফল্ট পদ্ধতি বেছে নিন এবং কখন ব্যতিক্রম মানা হবে তা ডকুমেন্ট করুন।
  • একটি রোটেশন পলিসি সেট করুন (কাডেন্স, ওভারল্যাপ, এবং জরুরি রিভোক কীভাবে হবে)।
  • অ্যাক্সেস রুল নির্ধারণ করুন (পার্টনার-ওয়াইড, ইউজার-লেভেল, বা উভয়)।
  • কি লগ রাখবেন ঠিক করুন (পার্টনার ID, ব্যবহারকারী ID যদি থাকে, এন্ডপয়েন্ট, অ্যাকশন, টাইমস্ট্যাম্প)।
  • একটি পার্টনার স্যান্ডবক্স প্রস্তুত করুন টেস্ট ক্রেডেনশিয়াল ও পূর্বানুমানযোগ্য স্যাম্পল ডেটা সহ।

শেষে, অনবোর্ডিংকে গাইডেড সেটআপ এর মতো বানান—একটি স্ক্যাভেঞ্জার হান্ট নয়। একটি পরিষ্কার স্যান্ডবক্স, ব্যবহারযোগ্য এরর, এবং উপযোগী লগই সপ্তাহ-একের হতাশা কমিয়ে সফল ইন্টিগ্রেশনে পরিণত করে।

প্রশ্নোত্তর

When should I choose an API key instead of OAuth 2.0 for a partner integration?

API কী ব্যবহার করুন যখন ইন্টিগ্রেশন সত্যিই সার্ভার-টু-সার্ভার এবং আপনাকে কেবল পার্টনার সিস্টেমকে শনাক্ত করতে হবে, নির্দিষ্ট end user নয়। যখন পার্টনার অ্যাপটি বিভিন্ন ব্যবহারকারীর পক্ষ থেকে কাজ করবে এবং আপনার প্রতি-ব্যবহারকারী সম্মতি, স্কোপ এবং রিভোকেশন দরকার—তখন OAuth 2.0 ব্যবহার করুন।

What’s the practical difference between “partner-level” access and “user-delegated” access?

পার্টনার-লেভেল অ্যাক্সেস মানে সাধারণত একটি API কী দিয়ে পুরো ইন্টিগ্রেশনকে শনাক্ত করা—এই কারণে অনুমতি ও লগগুলো সাধারণত গ্রানুলার নয়। ইউজার-ডেলিগেটেড অ্যাক্সেস (OAuth 2.0) হলে টোকেনগুলো নির্দিষ্ট ব্যবহারকারীর গ্রান্টের সঙ্গে জোড়া থাকে এবং অনুমোদিত স্কোপ স্পষ্ট থাকে, ফলে ইউজার-লেভেল পারমিশন চেক ও অডিট ট্রেইল সহজ হয়।

Why do API keys feel faster to onboard than OAuth?

API কী-তে অনবোর্ডিং সাধারণত মিনিটের ব্যাপার কারণ পার্টনার শুধু কী কপি করে রিকোয়েস্টে যোগ করে। OAuth অনবোর্ডিং দীর্ঘ হতে পারে কারণ পার্টনারদের একটি অ্যাপ রেজিস্টার করতে, redirect URI কনফিগার করতে এবং কনসেন্ট ফ্লো সম্পন্ন করতে হয়।

What are the most common OAuth setup mistakes partners make?

সবচেয়ে সাধারণ সমস্যা হল redirect URI মেলেনা: পার্টনার স্টেজিং-এ কাজ করে কিন্তু প্রোডাকশনে ভেঙে যায়। অন্য সাধারণ সমস্যা—টেস্ট ও প্রোডাকশন ক্রেডেনশিয়াল মিশে যাওয়া, authorization code-কে access token ভেবে নেয়া, এবং ভুল স্কোপ অনুরোধ করা।

How should we rotate API keys without breaking a partner’s production jobs?

প্রতিটি পার্টনারের জন্য দুইটি কী রাখার প্যাটার্ন সহ একটি ওভারল্যাপ উইন্ডো পরিকল্পনা করুন: নতুন কী ইস্যু করুন, স্বল্প সময়ে উভয় কীকে অনুমোদন রাখুন, তারপর নিশ্চিত হওয়ার পর পুরনো কী নিষ্ক্রিয় করুন। প্রতিটি এনভায়রনমেন্টের জন্য আলাদা কী রাখুন এবং জরুরি অবস্থায় তৎক্ষণাৎ রিভোক করা যায় তা নিশ্চিত করুন।

What’s a sensible token rotation and revocation approach with OAuth 2.0?

একটা ভালো প্যাটার্ন হল এক্সেস টোকেন ছোট-মেয়াদী রাখা এবং রিফ্রেশ টোকেন ব্যবহার করে নতুন এক্সেস টোকেন নেয়া। INCIDENT response-এ রিফ্রেশ-টোকেন রিভোকেশন নির্ভরযোগ্য ও তাৎক্ষণিক হওয়া উচিত যেন আপনি অ্যাক্সেস কাটার পর পার্টনার নতুন করে অ্যাক্সেস জেনারেট না করতে পারে।

Is it ever safe to put an API key in a mobile or browser app?

ডিফল্টভাবে ধরে নিন ব্রাউজার বা মোবাইল অ্যাপে রাখা যেকোনো কী বের করা যাবে, তাই API কীগুলো সার্ভারেই রাখুন। যদি ক্লায়েন্ট-সাইড সাইন-ইন ও ব্যবহারকারী-ভিত্তিক অ্যাক্সেস দরকার হয়, OAuth বেশি নিরাপদ কারণ এতে স্থায়ী শেয়ার্ড সিক্রেট ক্লায়েন্টে এমবেড করা লাগে না।

How do scopes help, and how should we design them for partners?

স্কোপ হলো নাম দেয়া অনুমতি, যেমন “read contacts” বা “write tickets”, যা আপনার API প্রতিটি অনুরোধে চেক করে। স্কোপগুলো ছোট ও কার্যনির্ভর রাখুন এবং পার্টনারকে কেবল প্রয়োজনি স্কোপ চাইতে বলুন—এতে least-privilege পালন করা সহজ হয় এবং পরবর্তীতে বিরোধ কম হয়।

What should we log to make partner auth issues easy to troubleshoot?

প্রতিটি অনুরোধ লগ করুন: পার্টনার আইডেন্টিফায়ার (key id বা client id), ব্যবহারকারী/subject (যদি থাকে),_GRANTED স্কোপ, যেই এন্ডপয়েন্ট/অ্যাকশন চেষ্টা করা হলো, সিদ্ধান্ত (success বা denied) ও কারণ, IP ঠিকানা, এবং একটি ইউনিক request ID যা রেসপন্সে ফেরত পাঠানো হয়। এগুলো ইনসিডেন্ট দ্রুত রিকনস্ট্রাক্ট করতে সাহায্য করে।

What are the key go-live checks before we open partner access to production?

ডিফল্ট auth পদ্ধতি নির্ধারণ করুন এবং কখন ব্যতিক্রম অনুমোদন পাবেন তা লিখে রাখুন; নিশ্চিত করুন আপনি দ্রুত ক্রেডেনশিয়াল ইস্যু ও রিভোক করতে পারবেন; রেট লিমিট এবং idempotency সেট করুন; একটি স্যান্ডবক্স, পরিষ্কার এরর মেসেজ এবং পল-আপ পদ্ধতি প্রস্তুত রাখুন যাতে এক পার্টনারকে অচল করলে সবাই প্রভাবিত না হয়।

শুরু করা সহজ
কিছু আশ্চর্যজনকতৈরি করুন

বিনামূল্যের পরিকল্পনা সহ অ্যাপমাস্টারের সাথে পরীক্ষা করুন।
আপনি যখন প্রস্তুত হবেন তখন আপনি সঠিক সদস্যতা বেছে নিতে পারেন৷

এবার শুরু করা যাক