Utiliser les anciens codes d'erreur d'authentification 403¶
🌐 Traduction par IA et humains
Cette traduction a été réalisée par une IA guidée par des humains. 🤝
Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖
Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.
Avant FastAPI version 0.122.0, lorsque les utilitaires de sécurité intégrés renvoyaient une erreur au client après un échec d'authentification, ils utilisaient le code d'état HTTP 403 Forbidden.
À partir de FastAPI version 0.122.0, ils utilisent le code d'état HTTP plus approprié 401 Unauthorized, et renvoient un en-tête WWW-Authenticate pertinent dans la réponse, conformément aux spécifications HTTP, RFC 7235, RFC 9110.
Mais si, pour une raison quelconque, vos clients dépendent de l'ancien comportement, vous pouvez y revenir en surchargeant la méthode make_not_authenticated_error dans vos classes de sécurité.
Par exemple, vous pouvez créer une sous-classe de HTTPBearer qui renvoie une erreur 403 Forbidden au lieu de l'erreur par défaut 401 Unauthorized :
from typing import Annotated
from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
app = FastAPI()
class HTTPBearer403(HTTPBearer):
def make_not_authenticated_error(self) -> HTTPException:
return HTTPException(
status_code=status.HTTP_403_FORBIDDEN, detail="Not authenticated"
)
CredentialsDep = Annotated[HTTPAuthorizationCredentials, Depends(HTTPBearer403())]
@app.get("/me")
def read_me(credentials: CredentialsDep):
return {"message": "You are authenticated", "token": credentials.credentials}
Astuce
Remarquez que la fonction renvoie l'instance de l'exception, elle ne la lève pas. La levée est effectuée dans le reste du code interne.