OAuth2 এর মাধ্যমে Authentication কনফিগার করা

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর Authentication এবং Authorization
193

OAuth2 একটি জনপ্রিয় অথেনটিকেশন প্রোটোকল যা নিরাপদ এবং স্কেলেবল অ্যাপ্লিকেশন তৈরিতে সাহায্য করে। FastAPI তে OAuth2 ব্যবহার করে অ্যাপ্লিকেশনে অথেনটিকেশন এবং অথরাইজেশন কনফিগার করা খুবই সহজ। এখানে, আমরা দেখব কিভাবে OAuth2-এর মাধ্যমে অথেনটিকেশন কনফিগার করা যায় এবং ব্যবহারকারীকে নিরাপদভাবে অ্যাপ্লিকেশনে প্রবেশ করতে দেয়।


OAuth2 কী?

OAuth2 হল একটি authorization framework, যা ব্যবহারকারীদের তাদের credentials (যেমন ইউজারনেম এবং পাসওয়ার্ড) প্রদান না করেই থার্ড-পার্টি অ্যাপ্লিকেশনগুলিকে তাদের ডাটা অ্যাক্সেস করতে দেয়। এতে Access Tokens ব্যবহার করা হয়, যা ব্যবহারকারীর অথেনটিকেশন ও অথরাইজেশন যাচাই করে।

FastAPI তে OAuth2 ইমপ্লিমেন্টেশন সাধারণত Bearer Token অথবা Authorization Code Flow এর মাধ্যমে করা হয়।


Step 1: FastAPI তে OAuth2 Authentication কনফিগার করা

FastAPI তে OAuth2 কনফিগার করতে, প্রথমে আপনাকে OAuth2PasswordBearer এবং OAuth2PasswordRequestForm ক্লাস ব্যবহার করতে হবে। এগুলি FastAPI দ্বারা সরবরাহিত ক্লাস যা সহজেই OAuth2 ফ্লো ইমপ্লিমেন্ট করতে সহায়ক।

১. OAuth2 কনফিগারেশন এবং Access Token তৈরি

প্রথমে, আপনাকে OAuth2PasswordBearer এবং OAuth2PasswordRequestForm ব্যবহার করে একটি অথেনটিকেশন সিস্টেম তৈরি করতে হবে।

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel
from typing import Union

app = FastAPI()

# OAuth2PasswordBearer: token URL প্রদান করে
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# Pydantic model: User and Token model
class User(BaseModel):
    username: str
    password: str

class Token(BaseModel):
    access_token: str
    token_type: str

# Dummy database for users
fake_users_db = {
    "johndoe": {
        "username": "johndoe",
        "password": "secretpassword",  # This should be hashed in real apps
    }
}

# Fake function to simulate password checking
def fake_verify_password(plain_password: str, hashed_password: str) -> bool:
    return plain_password == hashed_password

# Dummy function to simulate retrieving a user
def fake_get_user(username: str):
    if username in fake_users_db:
        user = fake_users_db[username]
        return User(username=user["username"], password=user["password"])
    return None

# Dependency to get the current user from token
def get_current_user(token: str = Depends(oauth2_scheme)):
    # In a real app, you would decode the token and get user info here.
    user = fake_get_user(token)  # This is just for demo purposes
    if user is None:
        raise HTTPException(status_code=401, detail="Invalid credentials")
    return user

এখানে:

  • OAuth2PasswordBearer: একটি স্কিমা যা Bearer token চেক করার জন্য ব্যবহৃত হয়।
  • Token: Access token ধারণ করে যা OAuth2 এর মাধ্যমে ব্যবহৃত হয়।

Step 2: Token Generation (Token URL)

এখন আমরা একটি token endpoint তৈরি করব যেখানে ব্যবহারকারীরা তাদের ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করে টোকেন পাবেন।

from fastapi import Form

@app.post("/token", response_model=Token)
async def login_for_access_token(username: str = Form(...), password: str = Form(...)):
    user = fake_get_user(username)
    if user is None or not fake_verify_password(password, user.password):
        raise HTTPException(status_code=401, detail="Invalid credentials")
    
    # Here, a real app would issue a JWT token
    return {"access_token": username, "token_type": "bearer"}

এখানে, login_for_access_token ব্যবহারকারীকে তাদের username এবং password দিয়ে লগইন করার সুযোগ দেয় এবং সঠিক হলে একটি Bearer token প্রদান করে।

রিকোয়েস্ট উদাহরণ:

POST /token

username: johndoe
password: secretpassword

রেসপন্স:

{
  "access_token": "johndoe",
  "token_type": "bearer"
}

Step 3: Token দিয়ে Protected Route Access করা

এখন আমরা OAuth2 token সহ একটি নিরাপদ route তৈরি করব, যা শুধুমাত্র অনুমোদিত ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য হবে।

@app.get("/users/me", response_model=User)
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

এখানে, get_current_user ডিপেনডেন্সি টোকেন যাচাই করে এবং বর্তমান ব্যবহারকারীকে ফেরত দেয়।

রিকোয়েস্ট উদাহরণ (Token সহ):

GET /users/me
Header:

Authorization: Bearer johndoe

রেসপন্স:

{
  "username": "johndoe",
  "password": "secretpassword"
}

Step 4: Token Expiry (Optional)

একটি প্রকৃত অ্যাপে, token expiry এবং refresh token সিস্টেমও থাকতে পারে। এখানে JWT (JSON Web Token) ব্যবহার করা যায়, যা টোকেনের expiry time সেট করতে দেয়। FastAPI এ JWT সহ OAuth2 ব্যবহার করা খুবই জনপ্রিয়।

এটি সাধারণত PyJWT লাইব্রেরির মাধ্যমে করা হয়:

pip install pyjwt

Step 5: JWT সহ OAuth2 Authentication

JWT ব্যবহার করে token তৈরি এবং যাচাই করার জন্য, আপনাকে JWT লাইব্রেরি এবং OAuth2PasswordBearer সেটআপ করতে হবে।

import jwt
from datetime import datetime, timedelta
from fastapi import HTTPException

SECRET_KEY = "mysecretkey"  # In production, use a secret key securely stored

# JWT token generation function
def create_access_token(data: dict, expires_delta: timedelta = timedelta(hours=1)):
    to_encode = data.copy()
    expire = datetime.utcnow() + expires_delta
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm="HS256")
    return encoded_jwt

# Token generation with JWT
@app.post("/token", response_model=Token)
async def login_for_access_token(username: str = Form(...), password: str = Form(...)):
    user = fake_get_user(username)
    if user is None or not fake_verify_password(password, user.password):
        raise HTTPException(status_code=401, detail="Invalid credentials")

    # Create JWT access token
    access_token = create_access_token(data={"sub": username})
    return {"access_token": access_token, "token_type": "bearer"}

এখানে, create_access_token ফাংশনটি JWT token তৈরি করে এবং exp (expiry) সেট করে। তারপর আমরা এই টোকেনটি ব্যবহারকারীর জন্য তৈরি করি এবং ফেরত দিই।


FastAPI তে OAuth2 ব্যবস্থাপনা খুবই সহজ এবং স্কেলেবল। আপনি OAuth2PasswordBearer এবং JWT (JSON Web Token) এর মাধ্যমে নিরাপদ অথেনটিকেশন এবং অথরাইজেশন সিস্টেম তৈরি করতে পারেন। OAuth2 এর মাধ্যমে Bearer token ব্যবহারের ফলে আপনার অ্যাপ্লিকেশন আরও নিরাপদ এবং ব্যবহারকারী-বান্ধব হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...