Интеграция по GraphQL¶
Система предоставляет открытый API для управления учетными записями и другими объектами Системы из внешних приложений.
API реализован по протоколу GraphQL — стандартному способу построения веб-API, функциональному аналогу REST API:
запрос передается HTTP-методом POST в формате JSON, ответ возвращается в формате JSON.
API закрывает типовые задачи интеграции системы управления учетными записями:
- управление учетными записями — создание, изменение, блокировка и удаление пользователей, назначение групп;
- управление факторами аутентификации — способы МФА пользователя, доверенные устройства;
- управление политиками доступа — сервисы, группы, директории, поставщики ИД;
- выгрузка данных — журналы событий, отчеты об изменении прав пользователей.
Адрес конечной точки API: https://<SERVER>/dopusk/graphql, где <SERVER> — адрес сервера Системы.
Возможности API¶
Через API доступны справочники Системы. Для каждого объекта поддерживаются операции чтения, создания, изменения и удаления. Состав доступных объектов приведен в таблице.
| Объект API | Справочник | Описание |
|---|---|---|
users |
Пользователи | Учетные записи, способы МФА, членство в группах |
groups |
Группы | Группы пользователей, роли доступа |
services |
Сервисы | Сервисы Единой точки входа, протоколы подключения |
directories |
Директории | Директории пользователей, синхронизация |
idProviders |
Поставщики ИД | Внешние поставщики идентификации |
userAttributes |
Пользовательские атрибуты | Атрибуты учетных записей |
attrGroups |
Атрибуты сервисов | Атрибуты, передаваемые сервисам |
registrationRequests |
Запросы на регистрацию | Обработка запросов на самостоятельную регистрацию |
certificates |
Сертификаты | Сертификаты Системы и пользователей |
personalAccessTokens |
- | Токены доступа пользователей |
devices |
- | Устройства пользователей |
auditLog |
Журнал событий | События аудита Системы |
userAccessRightsLogs |
Отчеты | Данные отчетов об изменении прав |
tickets |
- | Билеты Единой точки входа |
Дополнительно доступны операции без справочника: synchronizeDirectory — запуск синхронизации директории по ее идентификатору.
Чтение поддерживает отбор записей: точный фильтр по значениям полей, сравнения GTE, LTE, GT, LT,
перечисление значений IN, объединение условий AND, OR, NOT, а также постраничную выборку параметрами offset и limit.
Связанные объекты запрашиваются вложенными полями, например группы и контакты пользователя.
Включение API¶
По умолчанию API выключен — конечная точка не регистрируется и запросы к ней завершаются ошибкой 404.
Включение выполняется параметром server.graphql.enabled и требует перезапуска Системы.
- Установить параметр
server.graphql.enabledв значениеtrue. - Перезапустить сервисы Системы (см. Установка Системы).
После включения API доступен по адресу https://<SERVER>/dopusk/graphql.
При необходимости конечную точку можно вынести на отдельный порт — например, чтобы ограничить доступ к API
на уровне сети. За это отвечают параметры server.graphql.port (номер порта) и server.graphql.context-path
(путь контекста на отдельном порту).
Доступ к API¶
Доступ к API предоставляется администраторам Системы — пользователям, входящим в группу ROLE_SUPERUSER
(см. Назначение роли пользователям).
Запросы выполняются с правами администратора, действия фиксируются в журнале событий.
Для программного доступа без пользовательской сессии предназначен сервисный токен:
-
Установить значение параметра
server.graphql.service-token— длинную случайную строку. -
Передавать токен в каждом запросе в заголовке:
Токен предоставляет полный доступ к API, поэтому его значение хранится в защищенном хранилище (например, в секрете Docker или vault).
При обращении без допустимого токена и без сессии администратора Система возвращает ответ с кодом 401
и ошибкой UNAUTHENTICATED, а при сессии без прав администратора — код 403 и ошибку FORBIDDEN.
Выполнение запросов¶
Тело запроса — JSON с полем query, содержащим запрос GraphQL. Ответ возвращается в формате JSON:
данные — в поле data, ошибки — в поле errors.
Получение списка пользователей с ограничением количества записей:
Ответ:
{
"data": {
"users": [
{
"id": "03772d6f-9f92-4820-bbb6-798cf4f99c64",
"name": "test@test.ru",
"displayName": "Тестовый пользователь",
"blocked": false
},
{
"id": "0465acda-b763-4cbd-a7ea-41c73af659d3",
"name": "test2@test.ru",
"displayName": "Пользователь2",
"blocked": false
}
]
}
}
Отбор пользователей по точному значению поля и связанные объекты — директория и группы:
Создание пользователя (мутация createUser). Идентификатор директории получается запросом directories:
Изменение пользователя по идентификатору (мутация updateUser) и удаление (мутация deleteUser):
Для каждой модели операции именуются единообразно: create<Объект>, update<Объект>, delete<Объект>
(например, createGroup, updateService, deleteDirectory).
Состав схемы API можно изучить интроспекционным запросом GraphQL — клиентские приложения
(Insomnia, Postman, GraphQL Playground) загружают схему автоматически по адресу конечной точки.
Один запрос возвращает не более 500 записей, лимит настраивается параметром server.graphql.max-query-rows-count.
Для больших справочников используется постраничная выборка offset и limit.