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"}]
Întrebări & Exemple de Cod:
Autorizarea cu SecurityScopes în FastAPIAi o nelămurire despre utilizarea comenzii
Autorizarea cu SecurityScopes în FastAPIsau 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.