Bootcamp i backendudvikling med Node.js · Lektion

Integration af OAuth2-password flow

Integrér OAuth2-password flow til brugerlogin og hentning af tokens i Deres FastAPI-applikation.

Lektion 4 af 610 trin

Integration af OAuth2-password flow er en gratis Bootcamp i backendudvikling med Node.js-lektion på CoddyKit. Dette er lektion 4 af 6. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Bootcamp i backendudvikling med Node.js, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i backendudvikling med Node.js-kurset indeholder 6 lektioner i alt.

Introduktion til OAuth2-adgangskodeforløbet

Velkommen! Denne lektion handler om at integrere OAuth2 Password Flow i FastAPI. Det er en standardiseret og sikker måde, hvorpå brugere kan logge ind i din applikation.

Dette forløb giver brugerne mulighed for at sende deres brugernavn og adgangskode direkte til dit API. Hvis det lykkes, udsteder dit API et adgangstoken, som brugeren derefter bruger til at få adgang til beskyttede ressourcer.

Hvorfor bruge adgangskodeforløbet?

OAuth2 Password Flow egner sig især til førstepartsapplikationer, f.eks. din egen mobilapp eller webfrontend, hvor du har fuld tillid til klienten.

  • Sikkerhed: Det er en bredt anvendt og velkendt sikkerhedsstandard.
  • Enkelhed: Giver brugerne en enkel loginoplevelse.
  • Tokenbaseret: Efter login får brugerne et token, så de ikke behøver at sende loginoplysninger med hver anmodning.

Vigtige FastAPI-komponenter

FastAPI leverer specialiserede hjælpeværktøjer, der gør det nemt at implementere OAuth2 Password Flow:

  • OAuth2PasswordBearer: En afhængighed, der udtrækker adgangstokenet fra Authorization: Bearer-headeren i indgående anmodninger.
  • OAuth2PasswordRequestForm: En afhængighed, der automatisk fortolker username og password fra formulardataene, der sendes under en loginanmodning.

Vi kombinerer disse med FastAPIs effektive system til afhængighedsinjektion.

Opsætning af OAuth2PasswordBearer

Først skal vi initialisere OAuth2PasswordBearer. Parameteren tokenUrl er afgørende; den fortæller klienter, hvor de skal sende deres loginoplysninger for at få et adgangstoken.

Denne URL bliver stien til vores login-slutpunkt.

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!

Login-slutpunktet: /token

Dette er det centrale slutpunkt, hvor brugerne sender deres brugernavn og adgangskode. Det er typisk en POST-anmodning.

Vi bruger OAuth2PasswordRequestForm som en afhængighed. FastAPI fortolker automatisk de indgående formulardata og leverer attributterne username og 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!

Fuld kode: Login og beskyttet slutpunkt

Her er en komplet FastAPI-applikation, der demonstrerer OAuth2 Password Flow. Den indeholder slutpunktet /token til login samt slutpunktet /users/me/, der er beskyttet af adgangstokenet.

Kør denne kode: Gem den som main.py, og kør derefter uvicorn main:app --reload. Åbn dokumentationen på 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

Forstå get_current_user

Funktionen get_current_user er en afgørende afhængighed. Den udfører to hovedopgaver:

  1. Udtræk token: Bruger oauth2_scheme = Depends(OAuth2PasswordBearer(...)) til at hente tokenet fra Authorization-headeren.
  2. Valider og hent bruger: Afkoder og validerer tokenet (i en rigtig applikation ved hjælp af JWT-logikken fra lektion 1). Hvis tokenet er gyldigt, henter og returnerer den det tilsvarende User-objekt. Hvis tokenet er ugyldigt eller mangler, udløser den en HTTPException.

Sådan interagerer klienter

Her er et typisk klientforløb med OAuth2 Password Flow:

  1. Klienten (f.eks. en mobilapp) sender en POST-anmodning til /token med brugernavn og adgangskode i formulardata.
  2. Hvis det lykkes, returnerer API'et et access_token (f.eks. {"access_token": "abc.123.xyz", "token_type": "bearer"}).
  3. Ved efterfølgende beskyttede anmodninger medtager klienten dette token i Authorization-headeren: Authorization: Bearer abc.123.xyz.

Hurtig test: OAuth2-komponenter

Hvilken FastAPI-komponent er primært ansvarlig for at fortolke brugernavn og adgangskode fra en indgående loginanmodning (formulardata)?

Opsummering: OAuth2 Password Flow

Du har integreret OAuth2 Password Flow i FastAPI!

  • Du initialiserede OAuth2PasswordBearer med en tokenUrl.
  • Du oprettede et /token-slutpunkt, der bruger OAuth2PasswordRequestForm til at håndtere brugerlogin.
  • Du forstod, hvordan brugere godkendes, og hvordan adgangstokens udstedes.
  • Du sikrede slutpunkter ved at bruge en get_current_user-afhængighed til at udtrække og validere adgangstokenet.

Derefter kan du undersøge rollebaseret adgangskontrol (RBAC) for at tilføje mere detaljerede tilladelser baseret på brugerroller!

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
22
Lektioner
92

Ofte stillede spørgsmål

Er lektionen “Integration af OAuth2-password flow” gratis?

Ja — hele teksten til “Integration af OAuth2-password flow” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Bootcamp i backendudvikling med Node.js-kurset, skal du opgradere til CoddyKit PRO. Bootcamp i backendudvikling med Node.js-kurset indeholder 6 lektioner i alt.

Hvad lærer jeg i “Integration af OAuth2-password flow”?

Integrér OAuth2-password flow til brugerlogin og hentning af tokens i Deres FastAPI-applikation. Du øver dig i Bootcamp i backendudvikling med Node.js med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Bootcamp i backendudvikling med Node.js?

Der kræves ingen tidligere erfaring. Bootcamp i backendudvikling med Node.js på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 6.

Hvor lang tid tager lektionen “Integration af OAuth2-password flow”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Bootcamp i backendudvikling med Node.js-lektion?

Ja. Alle Bootcamp i backendudvikling med Node.js-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Brugerregistrering og login
  2. Generering og validering af JWT-tokens
  3. JWT til stateless-godkendelse
  4. Integration af OAuth2-password flow
  5. Rollebaseret adgangskontrol
  6. Rollebaseret adgangskontrol (RBAC)
← Tilbage til Bootcamp i backendudvikling med Node.js