Функция Security
Функция Security применяется внутри параметров
обработчика маршрута и создаёт зависимость безопасности.
Первым параметром передаётся вызываемый объект зависимости,
который извлекает и проверяет учётные данные из запроса.
Вторым параметром передаётся список областей доступа scopes.
В отличие от Depends, функция Security умеет
передавать запрошенные области в саму зависимость, а также
сохранять их в схему OpenAPI.
Синтаксис
Security(dependency, scopes=None, use_cache=True)
Параметр dependency задаёт зависимость, которая
вернёт учётные данные или выбросит ошибку HTTPException.
Параметр scopes принимает список строк или одну строку
с требуемыми областями доступа. Параметр use_cache
управляет кэшированием результата зависимости.
Пример
Давайте создадим простую зависимость безопасности и повесим её на маршрут:
from fastapi import FastAPI, Security, HTTPException
from fastapi.security import APIKeyHeader
app = FastAPI()
api_key = APIKeyHeader(name='X-API-Key')
def verify_key(key: str = Security(api_key)):
if key != 'abcde':
raise HTTPException(status_code=403, detail='Forbidden')
return key
@app.get('/')
def index(key: str = Security(verify_key)):
return {'key': key}
Результат выполнения кода для заголовка X-API-Key: abcde:
{"key": "abcde"}
Пример
Давайте передадим области доступа scopes
в зависимость безопасности:
from fastapi import FastAPI, Security
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2 = OAuth2PasswordBearer(
tokenUrl='token',
scopes={'items:read': 'Read items'}
)
def read_items(token: str = Security(oauth2, scopes=['items:read'])):
return {'token': token}
@app.get('/items/')
def items(token: str = Security(read_items)):
return {'token': token}
Результат выполнения кода для заголовка
Authorization: Bearer abcde:
{"token": "abcde"}
Запрошенная область items:read попадает в схему
безопасности OpenAPI и отображается в документации.
Смотрите также
-
функция
Depends,
которая создаёт обычную зависимость без областей доступа -
класс
OAuth2PasswordBearer,
который извлекает токен из заголовка Authorization -
класс
SecurityScopes,
который хранит запрошенные области доступа -
параметр
scopes,
который задаёт требуемые области доступа