OAuth 2.0: What, Why, When and How works (High Level Overview)

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

OAuth 2.0 কি?

OAuth 2.0 একটি অথরাইজেশন প্রোটোকল। এটি কোনো ইউজারকে তার ইউজারনেম ও পাসওয়ার্ড শেয়ার না করে অন্য কোনো অ্যাপলিকেশনকে তার অ্যাকাউন্টের কিছু রিসোর্স ব্যবহারের অনুমতি দেয়। উদাহরণস্বরূপ, আপনি যখন Login with Google অপশনটি ব্যবহার করেন, তখন আপনি আপনার Google অ্যাকাউন্টের তথ্য সরাসরি সেই অ্যাপলিকেশনের সাথে শেয়ার করেন না। বরং, OAuth 2.0 এর মাধ্যমে অ্যাপটি আপনার Google অ্যাকাউন্টের কিছু নির্দিষ্ট তথ্যের (যেমন: নাম, ইমেইল) অ্যাক্সেস পায়, আপনার পাসওয়ার্ড ছাড়াই।

কেন OAuth 2.0 প্রয়োজন?

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

  • অ্যাপ্লিকেশনটি যদি হ্যাক হয়, তাহলে আপনার অ্যাকাউন্টের তথ্য চুরি হয়ে যেতে পারত।
  • অ্যাপ্লিকেশনটির নিরাপত্তা দুর্বল হলে হ্যাকাররা আপনার অ্যাকাউন্টে প্রবেশ করতে পারত।
  • আপনি যদি অ্যাপ্লিকেশনটির উপর থেকে ট্রাস্ট হারিয়ে ফেলেন, তাহলে পাসওয়ার্ড পরিবর্তন করা ছাড়া অন্য কোনো উপায় থাকত না।

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

এছাড়া OAuth 2.0 হলো ওপেন সোর্স প্রোটোকল, সিকিউরিটি এবং স্কেলাবিলিটি বৃদ্ধি করার জন্য তৈরি ও মেইনটেইন করা হয়েছে তাই বড় বড় কোম্পানিগুলো আলাদা অথরাইজেশন সিস্টেম তৈরি করার পরিবর্তে OAuth 2.0 ফ্রেমওয়ার্ক ব্যবহার করে থাকে।

OAuth 2.0 কিভাবে কাজ করে?

OAuth 2.0 এর মূল প্রক্রিয়াটি কয়েকটি ধাপে সম্পন্ন হয়:

  • রিসোর্স ওনার: ব্যবহারকারী যার ডেটা অ্যাক্সেস করা হবে।
  • অ্যাপ্লিকেশন অনুরোধ পাঠায়:
    • গেম অ্যাপ Google-এর অথোরাইজেশন সার্ভারে একটি অনুরোধ পাঠায়, যাতে ক্লায়েন্ট আইডি, রিডাইরেক্ট URI, এবং স্কোপ (যেমন name,email, photo) থাকে।
  • ব্যবহারকারীর সম্মতি:
    • Google ব্যবহারকারীকে একটি সম্মতি পেইজ দেখায়, যেখানে অনুরোধ করা ডেটা (যেমন ইমেইল, নাম, ফটো) তালিকাভুক্ত করা হয়।
    • ব্যবহারকারী অনুমতি দিলে, Google একটি অ্যাক্সেস টোকেন ইস্যু করে।
  • ডেটা অ্যাক্সেস:
    • গেম অ্যাপ অ্যাক্সেস টোকেন ব্যবহার করে Google-এর রিসোর্স সার্ভার (যেমন UserInfo Endpoint) থেকে ব্যবহারকারীর ডেটা (যেমন ইমেইল, নাম) পায়।

নিচের চিত্রটি OAuth 2.0 এর মূল প্রবাহ দেখায়:

sequenceDiagram participant User participant Client participant AuthorizationServer participant ResourceServer User->>Client: গেম অ্যাপ্লিকেশন ব্যবহার করতে চায় Google দিয়ে। Client->>AuthorizationServer: গেম অথরাইজেশন রিকোয়েস্ট পাঠায় (Ex: Google) AuthorizationServer->>User: ব্যবহারকারীর পরিচয় যাচাই/ অনুমতি চায় User->>AuthorizationServer: অনুমতি প্রদান করে AuthorizationServer->>Client: অ্যাক্সেস টোকেন প্রদান করে এবং ডাটাবেজ স্টোর করে। Client->>ResourceServer: এই অ্যাক্সেস টোকেন দিয়ে রিসোর্স রিকোয়েস্ট করে। ResourceServer->>Client: রিসোর্স সার্ভার টোকেন চেক করে রিসোর্স প্রদান করে।

OAuth2.0 Flow Image

OAuth 2.0 এর ব্যবহার

  • Google দিয়ে লগইন: বিভিন্ন ওয়েবসাইটে Google, Facebook বা অন্য কোনো প্ল্যাটফর্ম দিয়ে লগইন করার অপশন থাকে। এখানে OAuth 2.0 ব্যবহৃত হয়।
  • থার্ড-পার্টি অ্যাপ্লিকেশন অ্যাক্সেস: অনেক অ্যাপ্লিকেশন আপনার Google Drive, Dropbox বা অন্য কোনো ক্লাউড স্টোরেজের ফাইল অ্যাক্সেস করার অনুমতি চায়। এখানেও OAuth 2.0 ব্যবহৃত হয়।
  • API অ্যাক্সেস: বিভিন্ন API (Application Programming Interface) যেমন Twitter API, Facebook API অ্যাক্সেস করার জন্য OAuth 2.0 ব্যবহৃত হয়।

সুবিধা

  • নিরাপত্তা: ব্যবহারকারীর ইউজারনেম ও পাসওয়ার্ড শেয়ার করার প্রয়োজন হয় না।
  • সীমিত অ্যাক্সেস: অ্যাপ্লিকেশনকে শুধুমাত্র প্রয়োজনীয় রিসোর্সের অ্যাক্সেস দেওয়া যায়।
  • সহজ ব্যবহার: ব্যবহারকারী সহজেই অ্যাপ্লিকেশনকে দেওয়া অনুমতি বাতিল করতে পারে।
  • বিভিন্ন প্ল্যাটফর্ম সমর্থন: ওয়েব, মোবাইল এবং ডেস্কটপ অ্যাপ্লিকেশনসহ বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়।

অসুবিধা

  • জটিলতা: OAuth 2.0 এর প্রক্রিয়াটি কিছুটা জটিল হতে পারে, বিশেষ করে নতুন ডেভেলপারদের জন্য।
  • কনফিগারেশন: সঠিকভাবে কনফিগারেশন না করলে নিরাপত্তা ঝুঁকি থাকতে পারে।

CORS (Cross-Origin Resource Sharing)

CORS একটি নিরাপত্তা ব্যবস্থা যা ব্রাউজারকে একটি ডোমেইন থেকে অন্য ডোমেইনে রিসোর্স অ্যাক্সেস করতে বাধা দেয়। OAuth 2.0 এর ক্ষেত্রে, ক্লায়েন্ট অ্যাপ্লিকেশন যদি অন্য ডোমেইনে অবস্থিত রিসোর্স সার্ভার থেকে ডেটা অ্যাক্সেস করতে চায়, তাহলে CORS একটি সমস্যা হতে পারে।

এই সমস্যা সমাধানের জন্য, রিসোর্স সার্ভারকে CORS হেডার কনফিগার করতে হয়। Access-Control-Allow-Origin হেডার ব্যবহার করে কোন ডোমেইনগুলোকে রিসোর্স অ্যাক্সেস করার অনুমতি দেওয়া হবে, তা নির্দিষ্ট করা যায়।

JWT কেন ব্যবহার করা হয় এবং কিভাবে অতিরিক্ত তথ্য যোগ করে ক্লায়েন্ট অ্যাপ রিসোর্স সার্ভারের সাথে সংযোগ করে?

JWT (JSON Web Token) হল একটি জনপ্রিয় টোকেন ফরম্যাট যা অথেন্টিকেশন এবং অথোরাইজেশনের জন্য ব্যবহৃত হয়। এটি হালকা, স্ব-ধারণকারী (self-contained), এবং সহজে পাঠানো ও ডিকোড করা যায়। এটি অতিরিক্ত তথ্য যোগ করে ক্লায়েন্ট অ্যাপ রিসোর্স সার্ভারের সাথে সংযোগ করে সহজে কাজ করার জন্য ব্যবহার করা হয়।

JWT কেন ব্যবহার করা হয়?

  • স্ব-ধারণকারী (Self-Contained):
    • JWT টোকেনের মধ্যে সমস্ত প্রয়োজনীয় তথ্য (যেমন ব্যবহারকারীর আইডি, রোল, স্কোপ, এক্সপায়ারেশন টাইম ইত্যাদি) থাকে। এর মানে হল রিসোর্স সার্ভারকে টোকেন ভেরিফাই করার জন্য অতিরিক্ত ডেটাবেস কুয়েরি করার প্রয়োজন হয় না।
  • হালকা এবং সহজে পাঠানো যায়:
    • JWT টোকেনগুলি সাধারণত ছোট এবং বেস৬৪-এনকোডেড, তাই এগুলি সহজে HTTP হেডার, URL, বা POST রিকোয়েস্টের বডিতে পাঠানো যায়।
  • সহজে ডিকোড করা যায়:
    • JWT টোকেনগুলি বেস৬৪-এনকোডেড, তাই যে কেউ এগুলি ডিকোড করে পেলোড (তথ্য) পড়তে পারে। তবে, টোকেনটি সাইন করা থাকে, তাই কেউ এটি পরিবর্তন করতে পারে না।
  • অতিরিক্ত তথ্য (Claims) পাঠানো:
    • JWT টোকেনের পেলোডে আপনি যেকোনো অতিরিক্ত তথ্য (claims) যোগ করতে পারেন, যেমন ব্যবহারকারীর রোল, স্কোপ, বা অন্যান্য মেটাডেটা। এটি রিসোর্স সার্ভারকে অতিরিক্ত তথ্য প্রদান করে।

OAuth 2.0 একটি শক্তিশালী এবং বহুল ব্যবহৃত অথরাইজেশন ফ্রেমওয়ার্ক। এটি থার্ড-পার্টি অ্যাপ্লিকেশনগুলোকে নিরাপদে রিসোর্স অ্যাক্সেস করার সুযোগ দেয়। JWT টোকেন ব্যবহার করে এটি আরোও অপ্টিমাইজ ভাবে ব্যবহার করা যায়। ডেভেলোপার সুবিধা এবং নিরাপত্তা বৃদ্ধি এছাড়া একটি একক স্ট্যান্ডার্ড এর জন্য বড় বড় কোম্পানিগুলো এটি ব্যবহার করে তাদের অথরাইজেশন সিস্টেম তৈরি করে এবং তাদের এই সিস্টেমকে ব্যবহার করে ইউজার অন্যান্য অ্যাপ্লিকেশনে অ্যাক্সেস দেয় যেমন Google, Facebook, Twitter ইত্যাদি। যা ইউজার এর জন্য সুবিধা এবং নিরাপত্তা বৃদ্ধি করে।