API-ресурсы и скоупы
API-ресурсы представляют защищённые API в вашей системе. Каждый ресурс определяет свой набор скоупов (разрешений), которые можно назначать ролям.
Создание API-ресурса
- Откройте Админ-панель по адресу
/admin - Перейдите к нужному realm
- Откройте API Resources > Create
- Заполните поля:
- Name -- человекочитаемое название (например "Blog API")
- Indicator -- URI аудитории (например
https://api.example.com). Это значение используется как claimaudв JWT-токенах. - Access Token TTL -- время жизни токена в секундах (по умолчанию: 3600)
Добавление скоупов
После создания ресурса добавьте скоупы для определения разрешений:
- Откройте API-ресурс
- Перейдите в секцию Scopes
- Нажмите Add Scope
- Введите name (например
read:posts) и description
Соглашение об именовании
Используйте шаблон action:entity для ясности:
read:posts -- чтение постов блога
write:posts -- создание/обновление постов
delete:posts -- удаление постов
admin:users -- управление пользователями
Запрос токенов для ресурса
При запросе токенов укажите параметр resource, чтобы указать, для какого API предназначен токен:
curl -X POST https://your-domain.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
Результирующий JWT будет содержать:
aud-- indicator ресурсаscope-- только предоставленные скоупы для этого ресурса
Встроенный Management API
Каждый realm автоматически создаёт ресурс Management API. Его indicator:
https://your-domain.com/api/v1/{realmUUID}
Этот ресурс содержит предопределённые скоупы для управления пользователями, приложениями, ролями, ресурсами, провайдерами и настройками. Полный список скоупов см. в разделе RBAC.
Проверка скоупов в API
После проверки подписи и срока действия JWT проверьте claim scope:
const scopes = decodedToken.scope.split(' ');
if (!scopes.includes('read:posts')) {
return res.status(403).json({ error: 'Insufficient scope' });
}
Полные примеры см. в разделе Защита API.