POST /api/launcher/auth), Segmenta поддерживает вход в лаунчер через сайт: пользователь нажимает в лаунчере «Войти через сайт», подтверждает вход в браузере под своей учётной записью — и лаунчер получает токен сессии. Логин и пароль в самом лаунчере не вводятся.
Поток построен по принципу device-flow: лаунчер открывает страницу подтверждения на сайте и опрашивает сервер, пока пользователь не подтвердит вход.
Фича выключена по умолчанию. Включается настройкой
launcher.site_auth.enabled и использует общий секрет launcher.api_secret.Настройка
Все настройки доступны в админ-панели → Настройки (категория «Интеграции»/«Безопасность»). Подробный справочник — в разделе Настройки сайта.| Ключ | По умолчанию | Описание |
|---|---|---|
launcher.api_secret | — | Общий секрет API лаунчера. Лаунчер передаёт его в каждом запросе. |
launcher.site_auth.enabled | false | Включает вход через сайт. |
launcher.site_auth.auto_approve | false | Подтверждать вход автоматически для уже залогиненного пользователя (без кнопки «Авторизовать»). |
launcher.site_auth.token_ttl_hours | 24 | Срок жизни выданного токена сессии лаунчера. |
launcher.site_auth.request_ttl_minutes | 10 | Сколько живёт незавершённый запрос на вход. |
launcher.site_auth.poll_interval_seconds | 3 | Рекомендуемый интервал опроса (возвращается лаунчеру в ответе start). |
launcher.site_auth.delivery_mode | poll | Способ доставки токена: poll или redirect. |
launcher.site_auth.allowed_redirect_schemes | [] | Белый список URI-схем для доставки через deep-link (например, myluncher). |
launcher.site_auth.bind_ip | false | Привязывать запрос к IP, с которого он создан. |
launcher.site_auth.bind_hwid | false | Привязывать запрос к HWID лаунчера. |
launcher.site_auth.branding_text | Лаунчер запрашивает доступ к вашему аккаунту | Текст на экране подтверждения. |
launcher.site_auth.code_secret | — | Секрет для подписи одноразовых кодов. Генерируется автоматически при первом запуске. |
connections.client_app_url (если она пуста — из CLIENT_URL).
Как это работает
Лаунчер создаёт запрос
Лаунчер отправляет
POST /api/launcher/site-auth/start с apiSecret. В ответ приходят requestId (публичный идентификатор для ссылки), code (секретный одноразовый код только для лаунчера), authorizeUrl и рекомендованный интервал опроса.Открывается страница подтверждения
Лаунчер открывает
authorizeUrl ({сайт}/launcher/authorize?request={requestId}) в системном браузере, чтобы использовать уже активную сессию сайта.Пользователь подтверждает вход
Если пользователь не авторизован — его перенаправит на вход и обратно. На экране подтверждения он видит название устройства и IP, и нажимает «Авторизовать» (либо вход подтверждается автоматически при включённом
auto_approve). Сервер привязывает запрос к пользователю и выпускает токен сессии лаунчера.Лаунчер забирает токен
Всё это время лаунчер опрашивает
POST /api/launcher/site-auth/status. Пока ожидает — статус pending; после подтверждения приходит accessToken и данные пользователя. Токен одноразовый: повторный опрос вернёт статус claimed без токена.Эндпоинты
start
Создаёт запрос на вход.- Метод:
POST /api/launcher/site-auth/start
Секрет
launcher.api_secret.Название устройства/лаунчера — показывается на экране подтверждения.
HWID лаунчера (если используется
bind_hwid).poll (по умолчанию) или redirect. Переопределяет глобальный режим для этого запроса.URI-схема для доставки через deep-link (только при
redirect; должна быть в allowed_redirect_schemes).Публичный идентификатор запроса (попадает в ссылку подтверждения).
Ссылка для открытия в браузере.
Секретный одноразовый код. Хранится только в лаунчере и нужен для опроса статуса.
Срок жизни запроса в секундах.
Рекомендуемый интервал опроса в секундах.
Фактический способ доставки (
poll или redirect).INVALID_API_SECRET, SITE_AUTH_DISABLED, TOO_MANY_REQUESTS.
status
Опрос статуса запроса. При подтверждении возвращает токен (одноразово).- Метод:
POST /api/launcher/site-auth/status
Секрет
launcher.api_secret.requestId из ответа start.Секретный
code из ответа start.HWID лаунчера (требуется при
bind_hwid).pending | denied | expired | claimed.approved.Токен сессии лаунчера для
session/join и session/check.Дата истечения токена.
Данные пользователя:
uuid, username, permissions, groups, skin, cape, isBanned, roleName, roleColor.INVALID_API_SECRET, INVALID_REQUEST, INVALID_CODE, TOO_MANY_REQUESTS, IP_MISMATCH, HWID_MISMATCH, SESSION_NOT_FOUND, USER_NOT_FOUND.
Эндпоинт
POST /api/launcher/site-auth/claim работает идентично status — алиас для лаунчеров, которым удобнее семантика «забрать один раз».deliver
Доставка через deep-link для режимаredirect. Сайт перенаправляет браузер сюда после подтверждения.
- Метод:
GET /api/launcher/site-auth/deliver?request={requestId}
{redirectScheme}://auth?request={requestId} — без токена, только как сигнал «вернись в лаунчер». Сам токен лаунчер всё равно забирает через status (по apiSecret + code). Так токен никогда не проходит через браузер.
Режим доставки
- poll (по умолчанию)
- redirect (опционально)
Лаунчер с момента
start периодически опрашивает status. Когда пользователь подтвердит вход — в ответе придёт токен. Работает везде, не требует регистрации URI-схемы.Безопасность
apiSecretпроверяется на каждом REST-запросе (сравнение за постоянное время) и ограничивается по частоте.requestId(публичный, в ссылке) иcode(секретный, только в лаунчере) — разные значения: знание ссылки не даёт получить токен.- Токен выдаётся ровно один раз (атомарный переход
approved→claimed). - Опционально запрос привязывается к IP (
bind_ip) и HWID (bind_hwid). - В режиме
redirectтокен не проходит через браузер — deep-link несёт толькоrequestId.