Класс HTTPAuthorizationCredentials
Класс HTTPAuthorizationCredentials представляет собой
Pydantic-модель, в которую FastAPI упаковывает данные
из HTTP-заголовка Authorization при работе
с зависимостью HTTPBearer. Объект этого класса
автоматически создаётся FastAPI и передаётся в функцию-зависимость
в качестве аргумента. Класс содержит два атрибута:
scheme - название схемы авторизации (обычно 'Bearer'),
и credentials - сами учётные данные (токен).
Импортируется класс из модуля fastapi.security.
Обычно он используется вместе с HTTPBearer
и функцией Depends или Security
для проверки токена доступа.
Синтаксис
from fastapi.security import HTTPAuthorizationCredentials
Атрибуты
Класс имеет два атрибута:
scheme - строка с названием схемы авторизации,
например 'Bearer'.
credentials - строка с учётными данными,
то есть токен, переданный клиентом.
Пример
Давайте создадим зависимость, которая принимает объект
HTTPAuthorizationCredentials и возвращает токен:
from fastapi import FastAPI, Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPBearer()
@app.get('/token')
def get_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
return {'token': credentials.credentials}
Результат выполнения кода при передаче заголовка
Authorization: Bearer abcde:
{"token": "abcde"}
Пример
Давайте выведем и схему, и сами учётные данные:
from fastapi import FastAPI, Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPBearer()
@app.get('/auth')
def read_auth(credentials: HTTPAuthorizationCredentials = Depends(security)):
return {
'scheme': credentials.scheme,
'credentials': credentials.credentials
}
Результат выполнения кода при передаче заголовка
Authorization: Bearer article:
{"scheme": "Bearer", "credentials": "article"}
Пример
Давайте проверим токен на соответствие ожидаемому значению:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPBearer()
@app.get('/protected')
def protected(credentials: HTTPAuthorizationCredentials = Depends(security)):
if credentials.credentials != 'abcde':
raise HTTPException(status_code=403, detail='Invalid token')
return {'message': 'hello'}
Результат выполнения кода при передаче заголовка
Authorization: Bearer abcde:
{"message": "hello"}
Смотрите также
-
класс
HTTPBearer,
который извлекает данные из заголовка Authorization -
атрибут
scheme,
который хранит название схемы авторизации -
атрибут
credentials,
который хранит токен доступа -
функция
Depends,
которая внедряет зависимость в обработчик