Перейти к содержанию

REST API

Эта страница — систематический перечень HTTP-эндпоинтов сервера Alatyr: метод, путь и одна строка назначения. За ролевой матрицей доступа и подробным разбором ключевых потоков (approve/reject/revoke, сервисные аккаунты, сети) — в Администрирование; за SSH Key Registry и Keyholder API отдельно — в SSH Key Registry.

Базовый префикс — /api/v1 (кроме GET /health). Формат ответа — JSON (кроме GET /api/v1/ssh/krl, отдающего бинарный OpenSSH KRL-файл, и GET /api/v1/certificates/{serial}/bundle, отдающего ZIP).

Аутентификация

Большинство эндпоинтов требуют Authorization: Bearer <token> — либо JWT (Keycloak или локальная аутентификация), либо токен сервисного аккаунта (wca_*). Ролевая модель (cert-admin/cert-approver/cert-viewer/ cert-auto-approver) описана в Администрирование, раздел «Роли».

Отдельная, не-Bearer схема авторизации — у эндпоинтов, которыми пользуется агент, а не человек/UI:

  • POST /api/v1/enroll, /enroll/user, /enroll/ssh, /enroll/ssh-key — неаутентифицированы на входе (создание заявки), но подчиняются собственным проверкам (nonce, source-auth, corp-verify, rate-limit).
  • GET /api/v1/requests/{id}/status, /bundle-version, /certificate и POST /api/v1/requests/{id}/checkin, /logs — заголовок X-Agent-Secret, выданный при /enroll.
  • GET /api/v1/keyholder/keys — IP-allowlist + rate-limit + опциональный токен (см. SSH Key Registry).

Аутентификация и сессия (auth)

Метод и путь Назначение
POST /api/v1/auth/callback Обмен PKCE authorization code на access/refresh токены (Keycloak)
POST /api/v1/auth/refresh Обновление access-токена по refresh-токену
POST /api/v1/auth/logout Выход (инвалидация сессии)
GET /api/v1/auth/me Текущий пользователь (email, роль)
GET /api/v1/auth/config Публичная конфигурация аутентификации
POST /api/v1/auth/local/login Локальный логин по email+паролю
POST /api/v1/auth/change-password Смена собственного пароля (локальная аутентификация)

Enrollment и агент (agent)

Метод и путь Назначение
POST /api/v1/enroll Регистрация устройства и отправка CSR (machine wifi)
POST /api/v1/enroll/nonce Выдача одноразового nonce (и, для первого TPM-аттестованного enroll, challenge Credential Activation)
POST /api/v1/enroll/user Регистрация per-user заявки для уже существующего устройства (user_mtls/ad_logon)
POST /api/v1/enroll/ssh Регистрация SSH-заявки для уже существующего устройства
GET /api/v1/requests/{id}/status Статус заявки на выпуск
POST /api/v1/requests/{id}/checkin Check-in агента (подтверждение установки сертификата)
POST /api/v1/requests/{id}/logs Загрузка снапшота лога агента
GET /api/v1/requests/{id}/bundle-version Лёгкий probe версии бандла для steady-state синхронизации SSID — агент вызывает его почти на каждой итерации; тяжёлый .../certificate вызывается только при расхождении версии
GET /api/v1/requests/{id}/certificate Скачивание подписанного сертификата + CA bundle (поддерживает ETag/If-None-Match для steady-state поллинга)

SSH (ssh)

Метод и путь Назначение
GET /api/v1/ssh/ca-public-key Публичный ключ SSH CA в формате authorized-keys (для директивы TrustedUserCAKeys в sshd)
GET /api/v1/ssh/krl Текущий SSH Key Revocation List (для директивы RevokedKeys в sshd)

SSH-ключи (ssh-keys)

Подробности модели — в SSH Key Registry.

Метод и путь Назначение
POST /api/v1/enroll/ssh-key Регистрация «сырого» hardware-backed SSH публичного ключа
GET /api/v1/admin/ssh-keys Список всех зарегистрированных SSH-ключей по флоту
POST /api/v1/admin/ssh-keys/{id}/approve Одобрение ожидающего SSH-ключа
POST /api/v1/admin/ssh-keys/{id}/reject Отклонение ожидающего SSH-ключа
POST /api/v1/admin/ssh-keys/{id}/revoke Отзыв активного (или отклонение ожидающего) SSH-ключа
GET /api/v1/devices/{serial}/ssh-keys SSH-ключи, зарегистрированные одним устройством

Keyholder API (keyholder)

Метод и путь Назначение
GET /api/v1/keyholder/keys Возвращает список активных SSH публичных ключей для логина (для AuthorizedKeysCommand)
GET /api/v1/admin/keyholder-tokens Список токенов keyholder-серверов (без значений)
POST /api/v1/admin/keyholder-tokens Создание нового токена keyholder-сервера
DELETE /api/v1/admin/keyholder-tokens/{id} Отзыв токена keyholder-сервера

Admin — заявки и устройства

Метод и путь Назначение
GET /api/v1/requests Список заявок на выпуск (с фильтрами)
GET /api/v1/requests.csv То же, экспорт CSV
POST /api/v1/requests/approve Массовое одобрение заявок
POST /api/v1/requests/check-conflicts Проверка конфликтов серийников перед массовым одобрением
POST /api/v1/requests/reject Массовое отклонение заявок
GET /api/v1/devices Список зарегистрированных устройств
GET /api/v1/devices.csv То же, экспорт CSV
GET /api/v1/devices/agent-versions Список встречающихся версий агента
PUT /api/v1/devices/{serial}/issue-policy-override Установить/снять override issue policy для устройства
GET /api/v1/devices/{serial}/logs Список снапшотов логов устройства
GET /api/v1/devices/{serial}/logs/{logId} Один снапшот лога (с содержимым)
DELETE /api/v1/devices/{serial}/logs/{logId} Удалить снапшот лога
POST /api/v1/devices/{serial}/request-logs Запросить свежий снапшот логов с устройства
DELETE /api/v1/devices/{serial}/request-logs Отменить ожидающий запрос логов
POST /api/v1/devices/{serial}/rotate-enrollment-token Ротация enrollment-токена устройства
POST /api/v1/devices/{serial}/revoke Отозвать все активные сертификаты устройства и, если это удалось для каждого из них, освободить license-слот (decommission) — подробнее в Лицензировании
POST /api/v1/devices/{serial}/unblock Снять блокировку устройства (device-block-on-revoke)
POST /api/v1/users/{identity}/revoke-certs Отозвать все активные сертификаты пользователя (по identity)

Admin — сертификаты и аудит

Метод и путь Назначение
GET /api/v1/certificates/{serial}/bundle Скачать бандл сертификата как ZIP
POST /api/v1/certificates/{serial}/revoke Отозвать сертификат (недоступно для SCEP-issued — см. Диагностика и ограничения)
GET /api/v1/audit Список записей аудит-лога
GET /api/v1/audit.csv То же, экспорт CSV
GET /api/v1/admin/stats Статистика дашборда

Admin — сети

Метод и путь Назначение
GET /api/v1/admin/networks Список корпоративных сетей (Wi-Fi + проводные)
GET /api/v1/admin/networks.csv То же, экспорт CSV
POST /api/v1/admin/networks Создать сеть (Wi-Fi или проводную)
DELETE /api/v1/admin/networks/{id} Полностью удалить сеть
POST /api/v1/admin/networks/{id}/disable Отключить сеть (soft delete)
POST /api/v1/admin/networks/{id}/restore Восстановить ранее отключённую сеть
PUT /api/v1/admin/networks/{id}/agent-profile-disabled Переключатель opt-out агентского профиля для Windows/Linux
PUT /api/v1/admin/networks/{id}/macos-agent-profile-disabled Переключатель opt-out MDM-профиля агента для macOS

Admin — пользователи

Метод и путь Назначение
GET /api/v1/users Список пользователей с ролями
GET /api/v1/users.csv То же, экспорт CSV
POST /api/v1/users/local Создать локального (пароль) пользователя
PUT /api/v1/users/{email}/roles Назначить роли пользователю
PUT /api/v1/users/{email}/enabled Включить/выключить пользователя
PUT /api/v1/users/{email}/password Сброс пароля локального пользователя администратором

Сервисные аккаунты (service-accounts)

Метод и путь Назначение
GET /api/v1/service-accounts Список сервисных аккаунтов
POST /api/v1/service-accounts Создать сервисный аккаунт
PUT /api/v1/service-accounts/{id}/enabled Включить/выключить сервисный аккаунт
DELETE /api/v1/service-accounts/{id} Удалить сервисный аккаунт

Вебхуки (webhooks)

Метод и путь Назначение
GET /api/v1/admin/webhooks Список webhook-эндпоинтов
POST /api/v1/admin/webhooks Создать webhook-эндпоинт
PUT /api/v1/admin/webhooks/{id} Обновить webhook-эндпоинт
DELETE /api/v1/admin/webhooks/{id} Удалить webhook-эндпоинт
PUT /api/v1/admin/webhooks/{id}/enabled Включить/выключить webhook-эндпоинт
POST /api/v1/admin/webhooks/{id}/test Отправить тестовую доставку
GET /api/v1/admin/webhooks/{id}/deliveries Постраничный журнал доставок webhook-эндпоинта — см. Эксплуатация

Settings (settings)

Метод и путь Назначение
GET /api/v1/settings/system Получить системные настройки
PUT /api/v1/settings/system Обновить системные настройки
GET /api/v1/settings/issuers Список issuer-профилей (по purpose)
GET /api/v1/settings/issuers/{purpose} Получить один issuer-профиль
PUT /api/v1/settings/issuers/{purpose} Создать/обновить issuer-профиль
POST /api/v1/settings/issuers/{purpose}/test-connection Проверить связность issuer-профиля
GET /api/v1/settings/agent-update/stuck Служебный список устройств для контроля версий агента

Corp-ownership verification (corp-verify)

Метод и путь Назначение
GET /api/v1/admin/corp-allowlist Список записей corp-ownership allowlist
POST /api/v1/admin/corp-allowlist Добавить устройство в corp-ownership allowlist
DELETE /api/v1/admin/corp-allowlist/{serial} Удалить устройство из corp-ownership allowlist
GET /api/v1/settings/sa-auto-approve Получить политику corp-ownership verification для SA auto-approve
PUT /api/v1/settings/sa-auto-approve Обновить политику corp-ownership verification для SA auto-approve

Enroll source-auth (enroll-source-auth)

Метод и путь Назначение
POST /api/v1/enroll/source-nonce Выдача source-auth nonce
GET /api/v1/settings/enroll-source-auth Получить политику enroll source-auth
PUT /api/v1/settings/enroll-source-auth Обновить политику enroll source-auth

Лицензия (license)

Подробное описание лимита, статусов, decommission и восстановления журнала учёта — в Лицензировании.

Метод и путь Назначение
GET /api/v1/license/status Статус лицензии
POST /api/v1/license/activate Активировать лицензию
POST /api/v1/license/attest Аттестация лицензии
POST /api/v1/license/decommission Списать устройство (decommission) из лицензионного учёта
POST /api/v1/license/reanchor Re-anchor usage ledger

Публичные и служебные

Метод и путь Назначение
GET /health Health check
GET /api/v1/version Версия сервиса (для корреляции с логами, см. Логирование)
GET /api/v1/features Публичные feature-флаги
GET /api/v1/issuer Возможности активного issuer'а