Integration af OAuth2-password flow
Integrér OAuth2-password flow til brugerlogin og hentning af tokens i Deres FastAPI-applikation.
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 fraAuthorization: Bearer-headeren i indgående anmodninger.OAuth2PasswordRequestForm: En afhængighed, der automatisk fortolkerusernameogpasswordfra 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_userForstå get_current_user
Funktionen get_current_user er en afgørende afhængighed. Den udfører to hovedopgaver:
- Udtræk token: Bruger
oauth2_scheme = Depends(OAuth2PasswordBearer(...))til at hente tokenet fraAuthorization-headeren. - 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 enHTTPException.
Sådan interagerer klienter
Her er et typisk klientforløb med OAuth2 Password Flow:
- Klienten (f.eks. en mobilapp) sender en
POST-anmodning til/tokenmed brugernavn og adgangskode i formulardata. - Hvis det lykkes, returnerer API'et et
access_token(f.eks.{"access_token": "abc.123.xyz", "token_type": "bearer"}). - 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
OAuth2PasswordBearermed entokenUrl. - Du oprettede et
/token-slutpunkt, der brugerOAuth2PasswordRequestFormtil 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!
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
- Brugerregistrering og login
- Generering og validering af JWT-tokens
- JWT til stateless-godkendelse
- Integration af OAuth2-password flow
- Rollebaseret adgangskontrol
- Rollebaseret adgangskontrol (RBAC)