Node.js बैकएंड विकास बूटकैंप · पाठ

OAuth2 पासवर्ड फ़्लो एकीकरण

अपने FastAPI अनुप्रयोग में उपयोगकर्ता लॉगिन और टोकन प्राप्त करने के लिए OAuth2 पासवर्ड फ़्लो को एकीकृत करें।

पाठ 4, कुल 6 में से10 चरण

OAuth2 पासवर्ड फ़्लो एकीकरण, CoddyKit पर Node.js बैकएंड विकास बूटकैंप का एक निःशुल्क पाठ है। यह 6 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Node.js बैकएंड विकास बूटकैंप सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Node.js बैकएंड विकास बूटकैंप पाठ्यक्रम में कुल 6 पाठ शामिल हैं।

OAuth2 Password Flow का परिचय

स्वागत है! यह पाठ FastAPI में OAuth2 Password Flow को एकीकृत करने पर केंद्रित है। यह उपयोगकर्ताओं को आपके अनुप्रयोग में लॉग इन करने का एक मानक और सुरक्षित तरीका है।

इस प्रवाह में उपयोगकर्ता अपना उपयोगकर्ता नाम और पासवर्ड सीधे आपके API को दे सकते हैं। सफल होने पर आपका API एक access token जारी करता है, जिसका उपयोग उपयोगकर्ता सुरक्षित संसाधनों तक पहुँचने के लिए करता है।

Password Flow का उपयोग क्यों करें?

OAuth2 Password Flow विशेष रूप से प्रथम-पक्ष अनुप्रयोगों के लिए उपयुक्त है, जैसे आपका अपना मोबाइल ऐप या वेब फ्रंटएंड, जहाँ आपको क्लाइंट पर पूरा भरोसा होता है।

  • सुरक्षा: यह व्यापक रूप से अपनाया गया और अच्छी तरह समझा जाने वाला सुरक्षा मानक है।
  • सरलता: उपयोगकर्ताओं के लिए सीधे और आसान लॉगिन अनुभव प्रदान करता है।
  • टोकन-आधारित: लॉगिन के बाद उपयोगकर्ताओं को एक टोकन मिलता है, इसलिए प्रत्येक अनुरोध के साथ प्रमाण-पत्र भेजने की आवश्यकता नहीं होती।

FastAPI के प्रमुख घटक

FastAPI OAuth2 Password Flow को आसानी से लागू करने के लिए विशेष उपयोगिताएँ प्रदान करता है:

  • OAuth2PasswordBearer: एक निर्भरता जो आने वाले अनुरोधों के Authorization: Bearer Header से access token निकालती है।
  • OAuth2PasswordRequestForm: एक निर्भरता जो लॉगिन अनुरोध के दौरान भेजे गए फ़ॉर्म डेटा से username और password को स्वतः पार्स करती है।

हम इन्हें FastAPI की शक्तिशाली Dependency Injection प्रणाली के साथ मिलाएँगे।

OAuth2PasswordBearer सेट करना

सबसे पहले, हमें OAuth2PasswordBearer को प्रारंभ करना होगा। tokenUrl पैरामीटर महत्वपूर्ण है; यह क्लाइंट को बताता है कि access token प्राप्त करने के लिए अपने लॉगिन प्रमाण-पत्र कहाँ भेजने हैं।

यह URL हमारे लॉगिन endpoint का पथ होगा।

from fastapi import FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

# 'token' is the URL path where clients will log in
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# We will create a @app.post("/token") endpoint next!

लॉगिन Endpoint: /token

यह वह मुख्य endpoint है जहाँ उपयोगकर्ता अपना उपयोगकर्ता नाम और पासवर्ड भेजेंगे। यह आमतौर पर POST अनुरोध होता है।

हम निर्भरता के रूप में OAuth2PasswordRequestForm का उपयोग करते हैं। FastAPI आने वाले फ़ॉर्म डेटा को स्वतः पार्स करता है और username तथा password विशेषताएँ उपलब्ध कराता है।

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm

@app.post("/token")
async def login_for_access_token(
    form_data: OAuth2PasswordRequestForm = Depends()
):
    # 1. Authenticate user (verify username/password)
    # 2. If valid, create an access token
    # 3. Return the token
    pass # Details coming in the next scene!

पूरा कोड: लॉगिन और सुरक्षित Endpoint

यह OAuth2 Password Flow दिखाने वाला एक पूरा FastAPI अनुप्रयोग है। इसमें लॉगिन के लिए /token endpoint और access token से सुरक्षित /users/me/ endpoint शामिल है।

यह कोड चलाएँ: इसे main.py के रूप में सहेजें, फिर uvicorn main:app --reload चलाएँ। दस्तावेज़ देखने के लिए http://127.0.0.1:8000/docs खोलें।

from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# --- Mock User & Token Logic (Simplified for this lesson) ---
class UserInDB(BaseModel):
    username: str
    hashed_password: str
    disabled: Optional[bool] = None

class CurrentUser(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None

fake_users_db = {
    "testuser": UserInDB(username="testuser", hashed_password="password123", disabled=False),
    "disableduser": UserInDB(username="disableduser", hashed_password="securepass", disabled=True)
}

def get_user_from_db(username: str):
    user_data = fake_users_db.get(username)
    if user_data:
        return CurrentUser(username=user_data.username, full_name=f"{user_data.username} Full", email=f"{user_data.username}@example.com", disabled=user_data.disabled)
    return None

def authenticate_user(username: str, password: str):
    user_in_db = fake_users_db.get(username)
    if not user_in_db or user_in_db.hashed_password != password: # In real app, use password hashing
        return None
    return get_user_from_db(username)

def create_access_token(data: dict):
    # In a real app, use `jwt.encode` with a secret key (from Lesson 1)
    return f"mock_jwt_for_{data['sub']}"
# --- End Mock Logic ---

@app.post("/token")
async def login_for_access_token(
    form_data: OAuth2PasswordRequestForm = Depends()
):
    user = authenticate_user(form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect username or password",
            headers={"WWW-Authenticate": "Bearer"},
        )
    if user.disabled:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="Inactive user"
        )
    access_token = create_access_token(data={"sub": user.username})
    return {"access_token": access_token, "token_type": "bearer"}

# Dependency to get the current user from the token
async def get_current_user(token: str = Depends(oauth2_scheme)):
    # In a real app, this would decode and validate the JWT (from Lesson 1)
    if not token.startswith("mock_jwt_for_"):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials",
            headers={"WWW-Authenticate": "Bearer"},
        )
    username = token.replace("mock_jwt_for_", "")
    user = get_user_from_db(username)
    if user is None or user.disabled:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials or inactive user",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return user

# A Protected Endpoint
@app.get("/users/me/", response_model=CurrentUser)
async def read_users_me(current_user: CurrentUser = Depends(get_current_user)):
    return current_user

get_current_user को समझना

get_current_user फ़ंक्शन एक महत्वपूर्ण निर्भरता है। यह दो मुख्य कार्य करता है:

  1. टोकन निकालना: Authorization Header से टोकन प्राप्त करने के लिए oauth2_scheme = Depends(OAuth2PasswordBearer(...)) का उपयोग करता है।
  2. उपयोगकर्ता का सत्यापन और प्राप्ति: टोकन को डिकोड और सत्यापित करता है, वास्तविक अनुप्रयोग में इसके लिए पाठ 1 के JWT तर्क का उपयोग किया जाएगा। मान्य होने पर यह संबंधित User ऑब्जेक्ट प्राप्त करके लौटाता है। अमान्य या अनुपस्थित होने पर यह HTTPException उत्पन्न करता है।

क्लाइंट किस तरह परस्पर क्रिया करते हैं

OAuth2 Password Flow में क्लाइंट की सामान्य परस्पर क्रिया इस प्रकार होती है:

  1. क्लाइंट, जैसे मोबाइल ऐप, फ़ॉर्म डेटा में उपयोगकर्ता नाम और पासवर्ड के साथ /token को POST अनुरोध भेजता है।
  2. सफल होने पर API एक access_token लौटाता है, जैसे {"access_token": "abc.123.xyz", "token_type": "bearer"}।
  3. इसके बाद के सुरक्षित अनुरोधों के लिए क्लाइंट इस टोकन को Authorization Header में शामिल करता है: Authorization: Bearer abc.123.xyz।

त्वरित जाँच: OAuth2 के घटक

आने वाले लॉगिन अनुरोध के फ़ॉर्म डेटा से username और password को पार्स करने के लिए मुख्य रूप से कौन-सा FastAPI घटक ज़िम्मेदार है?

पुनरावलोकन: OAuth2 Password Flow

आपने FastAPI में OAuth2 Password Flow को सफलतापूर्वक एकीकृत कर लिया है!

  • आपने tokenUrl के साथ OAuth2PasswordBearer को प्रारंभ किया।
  • आपने उपयोगकर्ता लॉगिन संभालने के लिए OAuth2PasswordRequestForm का उपयोग करके /token endpoint बनाया।
  • आपने उपयोगकर्ताओं का प्रमाणीकरण करने और access token जारी करने का तरीका समझा।
  • आपने access token निकालने और सत्यापित करने के लिए get_current_user निर्भरता का उपयोग करके endpoint सुरक्षित किए।

अगले चरण में आप उपयोगकर्ता की भूमिकाओं के आधार पर अधिक सूक्ष्म अनुमतियाँ जोड़ने के लिए Role-Based Access Control (RBAC) का अध्ययन कर सकते हैं!

शुरुआत निःशुल्क

एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
22
पाठ
92

अक्सर पूछे जाने वाले प्रश्न

क्या “OAuth2 पासवर्ड फ़्लो एकीकरण” पाठ निःशुल्क है?

हाँ—“OAuth2 पासवर्ड फ़्लो एकीकरण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Node.js बैकएंड विकास बूटकैंप पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Node.js बैकएंड विकास बूटकैंप पाठ्यक्रम में कुल 6 पाठ शामिल हैं।

“OAuth2 पासवर्ड फ़्लो एकीकरण” में मैं क्या सीखूँगा?

अपने FastAPI अनुप्रयोग में उपयोगकर्ता लॉगिन और टोकन प्राप्त करने के लिए OAuth2 पासवर्ड फ़्लो को एकीकृत करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Node.js बैकएंड विकास बूटकैंप का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Node.js बैकएंड विकास बूटकैंप शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Node.js बैकएंड विकास बूटकैंप शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 6 में से 4वाँ पाठ है।

“OAuth2 पासवर्ड फ़्लो एकीकरण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Node.js बैकएंड विकास बूटकैंप पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Node.js बैकएंड विकास बूटकैंप पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. उपयोगकर्ता पंजीकरण और लॉगिन
  2. JWT टोकन बनाना और सत्यापन
  3. स्टेटलेस प्रमाणीकरण के लिए JWT
  4. OAuth2 पासवर्ड फ़्लो एकीकरण
  5. भूमिका-आधारित पहुँच नियंत्रण
  6. भूमिका-आधारित पहुँच नियंत्रण (RBAC)
← Node.js बैकएंड विकास बूटकैंप पर वापस जाएँ