Доступ
Cookie браузера, сервисный токен, id аккаунта и отзываемая сессия.
Браузер не ходит в API напрямую. Страницы приложения вызывают /api/backend/… на хосте приложения и передают cookie lct_session. Этот путь не существует на сайте документации: здесь он указывал бы на сам портал.
Веб-сервер приложения добавляет три заголовка. Браузер их не видит и не должен их подставлять сам.
| Заголовок | Что это |
|---|---|
x-lct-service-token | Общий секрет веб-сервера и API. Имя переменной окружения — API_SERVICE_TOKEN. Значение в документацию не входит. |
x-lct-user | Id вошедшего аккаунта, не почта. |
x-lct-session | Отзываемый серверный токен сессии. Его выдаёт POST /auth/verify, веб-сервер достаёт его из cookie и передаёт API. |
Для маршрута аккаунта нужны и x-lct-user, и x-lct-session. Одного заголовка недостаточно: чужая или уже отозванная сессия получает 401 с текстом о повторном входе. Сессия отзывается при выходе и при смене доступа.
Без токена сервиса открыт только GET /health. Проверки движка и базы (/health/engine, /health/database) этот токен требуют. Маршруты входа (/auth/…) требуют токен сервиса, но не требуют аккаунт.
Информация
Черновик портала описывал только сервисный токен и id аккаунта. Заголовок x-lct-session
обязателен и проверяется в AccountGuard.
Ошибки
| Код | Когда |
|---|---|
| 400 | Тело или параметры не прошли проверку. |
| 401 | Аккаунт не назван, удалён, отключён, или сессия не совпала с id. |
| 403 | Запрос не от веб-сервера или действие только для администратора. |
| 404 | Объекта нет или он принадлежит другому аккаунту. |
| 409 | Действие сейчас невозможно. |
| 422 | Движок не смог прочитать файл. |
| 429 | Слишком много попыток. |
| 503 | Недоступен движок, база или хранилище ключей. |
| 504 | Движок не ответил вовремя. |
Тело ошибки обычно { statusCode, message, error }. У отдельных маршрутов форма другая: это видно в справочнике у конкретного ответа, а не выводится из этой таблицы.