Використовуйте старі коди статусу помилки автентифікації 403¶
🌐 Переклад ШІ та людьми
Цей переклад виконано ШІ під керівництвом людей. 🤝
Можливі помилки через неправильне розуміння початкового змісту або неприродні формулювання тощо. 🤖
Ви можете покращити цей переклад, допомігши нам краще спрямовувати AI LLM.
До версії FastAPI 0.122.0, коли інтегровані засоби безпеки повертали клієнту помилку після невдалої автентифікації, вони використовували HTTP код статусу 403 Forbidden.
Починаючи з версії FastAPI 0.122.0, вони використовують більш доречний HTTP код статусу 401 Unauthorized і повертають змістовний заголовок WWW-Authenticate у відповіді, відповідно до специфікацій HTTP, RFC 7235, RFC 9110.
Але якщо з якоїсь причини ваші клієнти залежать від старої поведінки, ви можете повернутися до неї, переписавши метод make_not_authenticated_error у ваших класах безпеки.
Наприклад, ви можете створити підклас HTTPBearer, який повертатиме помилку 403 Forbidden замість типового 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}
Порада
Зверніть увагу, що функція повертає екземпляр винятку, вона не породжує його. Породження відбувається в іншій частині внутрішнього коду.