Eski 403 Kimlik Doğrulama Hata Durum Kodlarını Kullanma¶
🌐 Yapay Zekâ ve İnsanlar Tarafından Çeviri
Bu çeviri, insanlar tarafından yönlendirilen bir yapay zekâ ile oluşturuldu. 🤝
Orijinal anlamın yanlış anlaşılması ya da kulağa doğal gelmeme gibi hatalar içerebilir. 🤖
Yapay zekâ LLM'ini daha iyi yönlendirmemize yardımcı olarak bu çeviriyi iyileştirebilirsiniz.
FastAPI 0.122.0 sürümünden önce, entegre security yardımcı araçları başarısız bir kimlik doğrulama (authentication) sonrasında client'a bir hata döndüğünde HTTP durum kodu olarak 403 Forbidden kullanıyordu.
FastAPI 0.122.0 sürümünden itibaren ise daha uygun olan HTTP durum kodu 401 Unauthorized kullanılmakta ve HTTP spesifikasyonlarına uygun olarak response içinde anlamlı bir WWW-Authenticate header'ı döndürülmektedir: RFC 7235, RFC 9110.
Ancak herhangi bir nedenle client'larınız eski davranışa bağlıysa, security class'larınızda make_not_authenticated_error metodunu override ederek eski davranışa geri dönebilirsiniz.
Örneğin, varsayılan 401 Unauthorized hatası yerine 403 Forbidden hatası döndüren bir HTTPBearer alt sınıfı oluşturabilirsiniz:
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}
İpucu
Fonksiyonun exception instance'ını döndürdüğüne dikkat edin; exception'ı raise etmiyor. Raise işlemi internal kodun geri kalan kısmında yapılıyor.