> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/security/authentication-and-authorization.md).

# Authentication and Authorization

### **Authentication: পরিচয় যাচাই (Who You Are?)**

Authentication প্রক্রিয়ায় ব্যবহারকারীকে তার পরিচয় প্রমাণ করতে হয়। সাধারণত এটি করা হয় **Username & Password**, **OTP**, **Biometric**, বা **OAuth** ইত্যাদির মাধ্যমে।

### **কিভাবে Authentication কাজ করে?**

১️) ব্যবহারকারী তার **Username & Password** প্রবেশ করায়।\
২️) সার্ভার এটি ডাটাবেজে সংরক্ষিত তথ্যের সাথে মিলিয়ে দেখে।\
৩️) যদি মিল পাওয়া যায়, তাহলে ব্যবহারকারীকে প্রবেশের অনুমতি দেওয়া হয়।

### **উদাহরণ: Python কোড দিয়ে Authentication**

নীচের কোডটি একটি সাধারণ Authentication সিস্টেম দেখায়—

```python
users_db = {
    "john_doe": "securepassword123",
    "alice_smith": "mypassword456"
}

def authenticate(username, password):
    if username in users_db and users_db[username] == password:
        return "✅ Authentication Successful!"
    else:
        return "❌ Authentication Failed!"

# উদাহরণ রান করা
print(authenticate("john_doe", "securepassword123"))  # ✅
print(authenticate("john_doe", "wrongpassword"))     # ❌
```

এখানে **"john\_doe"** যদি সঠিক পাসওয়ার্ড দেয়, তাহলে **Authentication Successful** হবে, নাহলে ব্যর্থ হবে।

***

### **Authorization: অনুমতি যাচাই (What You Can Do?)**

Authentication সফল হলে, এরপর আসে Authorization। অর্থাৎ, ব্যবহারকারী কোন কাজটি করতে পারবে বা কোন ডাটা অ্যাক্সেস করতে পারবে— সেটি নির্ধারণ করা হয়।

### **কিভাবে Authorization কাজ করে?**

১️) ব্যবহারকারী **সফলভাবে লগইন** করলে, তার জন্য একটি **Token বা Session তৈরি** করা হয়।\
২️) প্রত্যেক ব্যবহারকারীর **Role (যেমন: Admin, User, Guest)** সেট করা থাকে।\
৩️) এই **Role অনুযায়ী কিছু অনুমতি (Permission) সেট করা** থাকে।\
৪️) ব্যবহারকারী যখন কোনো অ্যাকশন নিতে চায়, তখন তার **Role এবং Permission যাচাই** করা হয়।

### **উদাহরণ: Python কোড দিয়ে Authorization**

নীচে **User Role-Based Authorization** এর একটি সাধারণ উদাহরণ দেওয়া হলো—

```python
user_roles = {
    "john_doe": "admin",
    "alice_smith": "user"
}

permissions = {
    "admin": ["read", "write", "delete"],
    "user": ["read"]
}

def authorize(username, action):
    role = user_roles.get(username)
    if role and action in permissions[role]:
        return f"✅ {username} is authorized for {action}"
    else:
        return f"❌ {username} is NOT authorized for {action}"

# উদাহরণ রান করা
print(authorize("john_doe", "delete"))   # ✅ (admin পারে)
print(authorize("alice_smith", "write")) # ❌ (user পারে না)
```

এখানে **john\_doe (admin)** হিসাবে **delete** করতে পারবে, কিন্তু **alice\_smith (user)** শুধু **read** করতে পারবে।

***

### &#x20;**Authentication বনাম Authorization: পার্থক্য**

| বিষয়                      | Authentication                  | Authorization                              |
| ------------------------- | ------------------------------- | ------------------------------------------ |
| কি বোঝায়?                 | ব্যবহারকারীর পরিচয় যাচাই করে    | ব্যবহারকারীর অনুমতি যাচাই করে              |
| কখন ঘটে?                  | প্রথম ধাপে (Login এর সময়)       | Authentication এর পর ঘটে                   |
| কী যাচাই করে?             | Password, OTP, Biometric, Token | User Role, Permission, Access Control      |
| ব্যবহারকারীর কি করতে হবে? | নিজের পরিচয় নিশ্চিত করতে হবে    | অনুমোদিত কাজের জন্য অনুরোধ করতে হবে        |
| উদাহরণ                    | Username & Password যাচাই করা   | একটি API কল করার অনুমতি আছে কিনা যাচাই করা |

***

### **সিস্টেম ডিজাইনে Authentication এবং Authorization ব্যবহারের পদ্ধতি**

✅ **JWT (JSON Web Token)**:\
Authentication এর জন্য **JWT Token** ব্যবহার করা হয়, যেখানে ব্যবহারকারীর তথ্য এনকোড করা থাকে। একবার লগইন করার পর, এই **Token** ব্যবহার করে পরবর্তী **Authorization** করা হয়।

✅ **OAuth 2.0**:\
Google, Facebook, GitHub-এর মত প্ল্যাটফর্মে **Authentication** করার জন্য OAuth ব্যবহৃত হয়। এটি ব্যবহারকারীর তথ্য অন্য একটি নির্ভরযোগ্য সার্ভার থেকে এনে দেয়।

✅ **RBAC (Role-Based Access Control)**:\
Authorization নিশ্চিত করার জন্য **Role-Based Access Control (RBAC)** ব্যবহৃত হয়, যেখানে প্রতিটি Role এর জন্য নির্দিষ্ট অনুমতি থাকে।

✅ **Session-Based Authentication**:\
সার্ভার ব্যবহারকারীর **Session ID** তৈরি করে এবং এটি **Cookie** তে সংরক্ষণ করে।

✅ **Multi-Factor Authentication (MFA)**:\
Password এর পাশাপাশি OTP, Email Verification, অথবা Biometric ব্যবহার করে নিরাপত্তা আরও শক্তিশালী করা হয়।

***

Authentication এবং Authorization, সিস্টেম ডিজাইনের **নিরাপত্তার মূল স্তম্ভ**। Authentication নিশ্চিত করে **আপনি কে?**, আর Authorization নির্ধারণ করে **আপনি কী করতে পারেন?**।

➡️ **একটি নিরাপদ সিস্টেম ডিজাইনের জন্য** আমাদের **শক্তিশালী Authentication প্রক্রিয়া** ও **সঠিক Authorization নিয়ম** মেনে চলা জরুরি।

💡 **যত শক্ত Authentication এবং Authorization ব্যবহার করবেন, ততই আপনার সিস্টেম সুরক্ষিত থাকবে!**&#x20;
