Класс HTTPDigest
Класс HTTPDigest применяется как зависимость
в маршрутах FastAPI для организации HTTP Digest аутентификации.
Он наследуется от класса HTTPBase и извлекает
заголовок Authorization, проверяя, что схема
аутентификации равна 'Digest'.
При успешной проверке возвращается объект
HTTPAuthorizationCredentials с полями scheme
и credentials.
Первым параметром передаётся scheme_name -
имя схемы для документации OpenAPI,
вторым - auto_error, который определяет,
выбрасывать ли ошибку при отсутствии заголовка.
Синтаксис
from fastapi.security import HTTPDigest
security = HTTPDigest(scheme_name='Digest', auto_error=True)
Пример
Давайте создадим зависимость HTTPDigest
и повесим её на маршрут:
from fastapi import FastAPI, Depends
from fastapi.security import HTTPDigest, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPDigest()
@app.get('/')
def index(credentials: HTTPAuthorizationCredentials = Depends(security)):
return {
'scheme': credentials.scheme,
'credentials': credentials.credentials
}
При запросе с заголовком
Authorization: Digest abcde
результат выполнения кода будет таким:
{"scheme": "Digest", "credentials": "abcde"}
Пример
Давайте проверим учётные данные и вернём ошибку, если они неверные:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPDigest, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPDigest()
@app.get('/user')
def user(credentials: HTTPAuthorizationCredentials = Depends(security)):
if credentials.credentials != 'abcde':
raise HTTPException(status_code=401, detail='Invalid credentials')
return {'user': 'authorized'}
При корректных данных результат выполнения кода:
{"user": "authorized"}
Пример
Давайте отключим автоматическую ошибку и обработаем отсутствие заголовка вручную:
При запросе без заголовка результат выполнения кода:
{"text": "no credentials"}
Смотрите также
-
класс
HTTPBasic,
который реализует HTTP Basic аутентификацию -
класс
HTTPBearer,
который реализует HTTP Bearer аутентификацию -
класс
HTTPAuthorizationCredentials,
который хранит схему и учётные данные из заголовка -
функция
Depends,
которая внедряет зависимости в обработчики