РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
242 of 307 menu

Класс SecurityScopes

Класс SecurityScopes применяется внутри зависимостей безопасности, которые объявлены через Security. Он передаётся в зависимость первым параметром и содержит области доступа, запрошенные у этой зависимости. Области хранятся в атрибуте scopes в виде списка строк, а в атрибуте scope_str они объединены в одну строку через пробел. Класс позволяет зависимости проверить, какие именно права требуются для текущего маршрута.

Объект SecurityScopes создаётся автоматически при вызове зависимости через Security, поэтому вручную его создавать не нужно.

Синтаксис

from fastapi import SecurityScopes security_scopes: SecurityScopes

Атрибуты

Класс SecurityScopes имеет два атрибута.

Атрибут scopes хранит список областей доступа, запрошенных у зависимости:

security_scopes.scopes

Атрибут scope_str хранит те же области, но объединённые в одну строку через пробел:

security_scopes.scope_str

Пример

Давайте создадим зависимость, которая принимает объект SecurityScopes и возвращает список запрошенных областей:

from fastapi import FastAPI, Security, SecurityScopes from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token') def get_scopes(security_scopes: SecurityScopes): return security_scopes.scopes @app.get('/items/') def read_items( token: str = Security(oauth2_scheme), scopes: list = Security(get_scopes, scopes=['items:read', 'items:write']) ): return {'scopes': scopes}

Результат выполнения кода для корректного токена:

{"scopes": ["items:read", "items:write"]}

Пример

Давайте используем атрибут scope_str, чтобы получить области одной строкой:

<+python+> from fastapi import FastAPI, Security, SecurityScopes from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token') def get_scope_str(security_scopes: SecurityScopes): return security_scopes.scope_str @app.get('/users/') def read_users( token: str = Security(oauth2_scheme), scope_str: str = Security(get_scope_str, scopes=['users:read', 'users:write']) ): return {'scope_str': scope_str} <-python+>

Результат выполнения кода для корректного токена:

<+python+> {"scope_str": "users:read users:write"} <-python+>

Пример

Давайте проверим, что токен обладает всеми запрошенными областями, и вернём ошибку при нехватке прав:

from fastapi import FastAPI, Security, SecurityScopes, HTTPException from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token') def verify_scopes(security_scopes: SecurityScopes): token_scopes = ['items:read'] for scope in security_scopes.scopes: if scope not in token_scopes: raise HTTPException( status_code=403, detail='Not enough permissions' ) return security_scopes.scopes @app.get('/items/') def read_items( token: str = Security(oauth2_scheme), scopes: list = Security(verify_scopes, scopes=['items:read']) ): return {'scopes': scopes}

Результат выполнения кода для корректного токена:

{"scopes": ["items:read"]}

Смотрите также

  • функция Security,
    которая объявляет зависимость безопасности с областями доступа
  • атрибут scopes,
    который хранит список запрошенных областей
  • атрибут scope_str,
    который хранит области одной строкой
  • класс OAuth2PasswordBearer,
    который извлекает токен из заголовка Authorization
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить