Usar Códigos de Estado de Error de Autenticación 403 Antiguos¶
Antes de FastAPI versión 0.122.0, cuando las utilidades de seguridad integradas devolvían un error al cliente después de una autenticación fallida, usaban el código de estado HTTP 403 Forbidden.
A partir de FastAPI versión 0.122.0, usan el código de estado HTTP más apropiado 401 Unauthorized, y devuelven un encabezado WWW-Authenticate sensato en la respuesta, siguiendo las especificaciones HTTP, RFC 7235, RFC 9110.
Pero si por alguna razón tus clientes dependen del comportamiento anterior, puedes revertirlo sobrescribiendo el método make_not_authenticated_error en tus clases de seguridad.
Por ejemplo, puedes crear una subclase de HTTPBearer que devuelva un error 403 Forbidden en lugar del error por defecto 401 Unauthorized:
fromtypingimportAnnotatedfromfastapiimportDepends,FastAPI,HTTPException,statusfromfastapi.securityimportHTTPAuthorizationCredentials,HTTPBearerapp=FastAPI()classHTTPBearer403(HTTPBearer):defmake_not_authenticated_error(self)->HTTPException:returnHTTPException(status_code=status.HTTP_403_FORBIDDEN,detail="Not authenticated")CredentialsDep=Annotated[HTTPAuthorizationCredentials,Depends(HTTPBearer403())]@app.get("/me")defread_me(credentials:CredentialsDep):return{"message":"You are authenticated","token":credentials.credentials}
Consejo
Ten en cuenta que la función devuelve la instancia de la excepción, no la lanza. El lanzamiento se hace en el resto del código interno.