Autorizarea cu SecurityScopes în FastAPI în FastAPI

security FastAPI 0.110+ / OAuth2 Q&A / Distribuie cod

Controlul granular al permisiunilor bazat pe scopuri OAuth2 (Scopes): verificarea drepturilor specifice per endpoint în Swagger UI.

Sintaxă
Security(get_current_user, scopes=["items:read", "items:write"])

Pentru API-urile mari, simpla verificare dacă utilizatorul este autentificat nu este suficientă; trebuie verificate permisiunile specifice acordate tokenului (cum ar fi read:users sau admin:write). Standardul OAuth2 numește aceste permisiuni Scopes.

FastAPI include clasa SecurityScopes care, utilizată împreună cu Security(), permite funcției de autentificare să inspecteze scopurile exacte cerute de endpoint-ul apelat și să refuze accesul dacă tokenul nu le include.

Exemplu: Verificare scopuri OAuth2 cu SecurityScopes
from fastapi import FastAPI, Depends, HTTPException, Security, status
from fastapi.security import SecurityScopes, OAuth2PasswordBearer
from typing import Annotated

app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token", scopes={
    "items:read": "Permisiune de citire produse",
    "items:write": "Permisiune de creare și editare produse"
})

async def get_current_user(
    security_scopes: SecurityScopes,
    token: Annotated[str, Depends(oauth2_scheme)]
):
    user_token_scopes = ["items:read"] # Simulare scopuri din token
    for scope in security_scopes.scopes:
        if scope not in user_token_scopes:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail=f"Permisiune insuficientă. Este necesar scopul: {scope}"
            )
    return {"username": "operator"}

@app.get("/items", dependencies=[Security(get_current_user, scopes=["items:read"])])
async def read_items():
    return [{"name": "Produs 1"}]

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Autorizarea cu SecurityScopes în FastAPI

Ai o nelămurire despre utilizarea comenzii Autorizarea cu SecurityScopes în FastAPI sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.