Перейти к основному содержимому

Управление доступом (RBAC)

VoxKey реализует RBAC через API-ресурсы, скоупы и роли. Это позволяет контролировать, к чему имеют доступ пользователи и приложения в ваших API.

Модель данных

API-ресурсы

API Resource представляет защищенный API в вашей системе. Каждый ресурс содержит:

  • Name -- человекочитаемое название (например "Blog API")
  • Indicator -- URI аудитории для запросов токенов (например https://api.example.com)
  • Access Token TTL -- время жизни токена в секундах для этого ресурса
  • Scopes -- разрешения, принадлежащие этому ресурсу

Запрос токенов для конкретного ресурса через параметр resource:

curl -X POST https://auth.example.com/oauth2/{realmUUID}/token \
-d grant_type=client_credentials \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_SECRET \
-d scope="read:posts write:posts" \
-d resource=https://api.example.com

Скоупы

Скоупы -- это разрешения, привязанные к API Resource. Они попадают в JWT access-токены как claim scope.

Встроенные OIDC-скоупы (всегда доступны):

  • openid -- обязателен для OIDC-потоков
  • profile -- имя пользователя и метаданные
  • email -- email пользователя
  • phone -- телефон пользователя
  • offline_access -- выдача refresh-токенов

Пользовательские скоупы определяются для каждого API Resource (например read:posts, admin:users).

Роли

Роли группируют скоупы и назначаются пользователям или приложениям.

Два типа ролей:

ТипНазначаетсяСценарий
userПользователям realmРазрешения конечных пользователей (viewer, editor, admin)
m2mПриложениямРазрешения для межсервисного взаимодействия

Роль может включать скоупы из нескольких API-ресурсов.

Management API

Каждый realm получает встроенный ресурс Management API со следующими скоупами:

СкоупОписание
allПолный доступ ко всем эндпоинтам
users:readПросмотр пользователей
users:writeСоздание, обновление, удаление пользователей
users:rolesУправление назначением ролей
applications:readПросмотр приложений
applications:writeСоздание, обновление, удаление приложений
roles:readПросмотр ролей
roles:writeСоздание, обновление, удаление ролей
resources:readПросмотр API-ресурсов
resources:writeСоздание, обновление, удаление API-ресурсов
providers:readПросмотр провайдеров аутентификации
providers:writeУправление провайдерами
settings:readПросмотр настроек realm
settings:writeОбновление настроек realm
logs:readПросмотр журналов аудита

Как токены содержат разрешения

При запросе токена VoxKey определяет роли пользователя или M2M-приложения, собирает все предоставленные скоупы, пересекает их с запрошенными и встраивает в JWT:

{
"sub": "user_abc123",
"aud": "https://api.example.com",
"scope": "read:posts write:posts",
"iss": "https://auth.example.com/oauth2/{realmUUID}",
"exp": 1711612800
}

Настройка RBAC

  1. Создайте API Resource -- определите URI аудитории и скоупы
  2. Создайте роли -- сгруппируйте скоупы в логические роли
  3. Назначьте роли -- привяжите роли к пользователям или M2M-приложениям
  4. Проверяйте в API -- валидируйте claim scope во входящих JWT