API и токены
Панель полностью управляется через HTTP API — интерфейс работает через тот же API. Полное описание методов со схемами запросов и ответов доступно на openapi.gameap.io.
Эта страница — о том, как в API аутентифицироваться.
Способы аутентификации
| Способ | Для чего | Срок жизни |
|---|---|---|
| Токен сессии | Работа интерфейса | 24 часа или 7 дней |
| Персональный токен доступа (PAT) | Скрипты, интеграции, автоматизация | Бессрочно |
| Короткоживущий токен | WebSocket и скачивание файлов | 10 секунд |
Токен передаётся заголовком:
Authorization: Bearer <токен>
Персональные токены доступа
Это основной способ для автоматизации: токен не привязан к сессии, не истекает и имеет собственный набор разрешений.
Создание
Создать токен можно в профиле или запросом:
curl -X POST https://panel.example.com:8025/api/tokens \
-H "Authorization: Bearer <токен сессии>" \
-H "Content-Type: application/json" \
-d '{"name": "ci-deploy", "abilities": ["server:list", "server:restart"]}'
Ответ содержит токен целиком:
{"token": "12|kJ3n8sQm..."}
Токен показывается только один раз. В базе хранится лишь его хеш SHA-256, восстановить значение невозможно — если потеряли, выпустите новый.
Формат токена — {идентификатор}|{секрет}. Разделитель | обязателен: передавайте значение
целиком, как оно выдано.
Разрешения токена
Разрешения указываются при создании и ограничивают токен независимо от прав пользователя: токен не может больше, чем разрешено ему, и не может больше, чем разрешено его владельцу.
| Разрешение | Что позволяет |
|---|---|
server:list |
Просмотр списка серверов |
server:start |
Запуск сервера |
server:stop |
Остановка сервера |
server:restart |
Перезапуск сервера |
server:update |
Обновление сервера |
server:console |
Чтение и запись в консоль |
server:rcon-console |
Консоль RCON |
server:rcon-players |
Управление игроками через RCON |
server:tasks-manage |
Управление задачами сервера |
server:settings-manage |
Управление настройками сервера |
admin:server:create |
Создание серверов |
admin:gdaemon-task:read |
Чтение заданий демона |
Разрешения с префиксом admin: может выдать только администратор — при попытке добавить их
обычным пользователем запрос завершится ошибкой.
Актуальный список доступен запросом:
GET /api/tokens/abilities
Просмотр и отзыв
GET /api/tokens — список своих токенов
DELETE /api/tokens/{id} — отозвать токен
В списке видны имя, разрешения и время последнего использования — по нему удобно находить неиспользуемые токены.
Смена пароля отзывает токены. Все персональные токены, созданные до смены пароля, перестают работать. После смены пароля выпустите токены заново.
Пример использования
TOKEN='12|kJ3n8sQm...'
# список серверов
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com:8025/api/servers
# перезапуск сервера
curl -X POST -H "Authorization: Bearer $TOKEN" \
https://panel.example.com:8025/api/servers/1/restart
Токен сессии
Выдаётся при входе по логину и паролю:
curl -X POST https://panel.example.com:8025/api/auth/login \
-H "Content-Type: application/json" \
-d '{"login": "admin", "password": "..."}'
Формат токена — PASETO v4.local. Обычная сессия живёт 24 часа, с отметкой «запомнить меня» — 7 дней.
Выход (POST /api/auth/logout) заносит токен в список отозванных, который проверяется при каждом
запросе.
Если у пользователя включена двухфакторная аутентификация, вход возвращает не токен, а
two_factor_required вместе с challenge_token; второй фактор подтверждается запросом
POST /api/auth/2fa/verify. Подробности — Безопасность.
Для автоматизации сессионные токены неудобны: они истекают, а вход защищён ограничением частоты попыток и, возможно, капчей. Используйте персональные токены.
Короткоживущие токены
Нужны там, где токен вынужден передаваться в адресе страницы — подключение по WebSocket и скачивание
файлов. Выдаются запросом POST /api/auth/short-lived-token, имеют префикс glst_, одноразовые
и живут не дольше 10 секунд независимо от настроек.
Только такие токены принимаются в параметре запроса ?token=; персональный токен там передать
нельзя — это защищает его от попадания в журналы веб-серверов и историю браузера.
Ограничения и коды ответов
| Код | Причина |
|---|---|
401 |
Токен не передан, недействителен или отозван |
403 |
Токену или пользователю не хватает прав |
422 |
Ошибка проверки данных запроса |
429 |
Превышен предел попыток входа |
Ограничение частоты действует только на вход и проверку второго фактора: 20 неудачных попыток с одного адреса и 5 на один логин за 15 минут. На запросы с персональным токеном ограничений по частоте нет.
CORS
Если API вызывается из браузера со стороннего адреса, перечислите допустимые источники
в HTTP_ALLOWED_ORIGINS — полностью, со схемой. Подстановка * не поддерживается.
См. Справочник config.env.