Параметр scope
Параметр scope применяется в зависимостях
безопасности FastAPI и задаёт область доступа,
которую должен иметь OAuth2-токен для вызова
защищённого маршрута. Передаётся строкой или
списком строк в функцию Security либо
Depends вместе с зависимостью
OAuth2PasswordBearer или
OAuth2AuthorizationCodeBearer. Если токен
не содержит нужной области, FastAPI возвращает
ошибку 403 Forbidden.
Синтаксис
Security(dependency, scopes=['scope1', 'scope2'])
Пример
Давайте объявим зависимость с областью доступа
'items' и защитим маршрут:
from fastapi import FastAPI, Depends, Security
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
scopes={'items': 'read items'}
)
@app.get('/items/')
def read_items(
token: str = Security(oauth2_scheme, scopes=['items'])
):
return {'token': token, 'scope': 'items'}
Результат выполнения кода при валидном токене
с областью 'items':
{"token": "abcde", "scope": "items"}
Пример
Давайте передадим несколько областей доступа одним списком:
from fastapi import FastAPI, Security
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
scopes={
'items': 'read items',
'users': 'read users'
}
)
@app.get('/admin/')
def admin_panel(
token: str = Security(
oauth2_scheme,
scopes=['items', 'users']
)
):
return {'token': token, 'access': 'granted'}
Результат выполнения кода при валидном токене с обеими областями:
{"token": "abcde", "access": "granted"}
Смотрите также
-
параметр
scopes,
который задаёт словарь доступных областей -
класс
OAuth2PasswordBearer,
который извлекает OAuth2-токен из заголовка -
функция
Security,
которая добавляет области доступа к зависимости -
класс
SecurityScopes,
который хранит запрошенные области доступа