Атрибут scopes
Атрибут scopes принадлежит классу OAuth2PasswordBearer
и хранит словарь областей доступа (scopes) OAuth2.
Ключи словаря - это названия областей, а значения - их человекочитаемые описания.
FastAPI использует этот атрибут при построении схемы безопасности в OpenAPI,
чтобы клиенты и документация знали, какие области доступа поддерживает приложение.
Сам атрибут не выполняет проверку прав - он лишь описывает доступные области.
Проверку областей доступа выполняет зависимость Security
совместно с параметром scopes.
Синтаксис
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
scopes={'scope_name': 'scope description'}
)
После создания экземпляра словарь областей доступен через атрибут scopes:
oauth2_scheme.scopes
Пример
Давайте создадим схему OAuth2PasswordBearer с двумя областями доступа
и посмотрим, что хранит атрибут scopes:
from fastapi import FastAPI
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
scopes={
'user': 'read user info',
'admin': 'manage resources'
}
)
@app.get('/')
def index():
return {'scopes': oauth2_scheme.scopes}
Результат выполнения кода:
{"scopes": {"user": "read user info", "admin": "manage resources"}}
Пример
Давайте используем области доступа из атрибута scopes
вместе с зависимостью Security для ограничения маршрута:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer, SecurityScopes
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
scopes={
'user': 'read user info',
'admin': 'manage resources'
}
)
@app.get('/items/')
def read_items(
security_scopes: SecurityScopes,
token: str = Depends(oauth2_scheme)
):
return {
'token': token,
'required_scopes': security_scopes.scopes
}
При обращении к маршруту FastAPI сверит запрошенные области доступа
со словарём, переданным в атрибут scopes при создании схемы.
Смотрите также
-
класс
OAuth2PasswordBearer,
который описывает схему безопасности OAuth2 по паролю -
атрибут
tokenUrl,
который задаёт адрес получения токена -
параметр
scopes,
который передаёт области доступа в зависимость -
класс
SecurityScopes,
который предоставляет доступ к запрошенным областям в обработчике