Files
moonwell-core/doc/LauncherAuthorizationOperations.md
T
2026-08-17 20:24:17 +04:00

4.2 KiB
Raw Blame History

Эксплуатация launcher-авторизации

Нормативный протокол описан в LauncherAuthorizationContract.md. Этот документ относится к реализованной в данном репозитории серверной части.

Что входит в репозиторий

  • authserver использует временные SRP salt/verifier для всех обычных аккаунтов и не делает fallback на постоянный пароль;
  • SQL update 2026_08_16_00.sql добавляет активные ticket, журнал погашений, точный IP allowlist для dev-аккаунтов и provenance session key;
  • issue-launcher-ticket.sh является reference adapter для backend и локальной интеграции. Production backend должен реализовать ту же операцию внутри своего доверенного процесса, включая аутентификацию launcher session и rate limiting;
  • reconnect и вход в worldserver разрешены только session key с provenance launcher или dev.

Исходников MoonWell Launcher, MoonWell.dll, GlueXML и backend в этом репозитории нет. Их реализация должна следовать отдельным разделам контракта.

Выпуск ticket

База должна быть запущена и обновлена штатным ac-db-import:

./issue-launcher-ticket.sh PLAYER --build 12340 --ttl 60

Успешный результат — одна JSON-строка в stdout. Она содержит plaintext ticket и должна быть сразу передана launcher по TLS с Cache-Control: no-store. Диагностика выводится в stderr. Новый вызов для того же account атомарно заменяет предыдущую активную generation.

Скрипт не является публичным HTTP endpoint. Нельзя предоставлять игрокам доступ к его запуску или к MySQL credentials.

Dev allowlist

Постоянный verifier используется только при совпадении account и точного remote IP с активной строкой allowlist:

INSERT INTO launcher_dev_account (account_id, allowed_ip, comment)
SELECT id, '10.20.30.40', 'local developer over VPN'
FROM account
WHERE username = 'DEVACCOUNT'
ON DUPLICATE KEY UPDATE enabled = 1, comment = VALUES(comment);

Отключение:

UPDATE launcher_dev_account
SET enabled = 0
WHERE account_id = (SELECT id FROM account WHERE username = 'DEVACCOUNT')
  AND allowed_ip = '10.20.30.40';

CIDR и wildcard намеренно не поддерживаются: allowlist требует точного IP.

Миграция и откат

SQL update очищает существующие account.session_key, чтобы legacy reconnect не обходил launcher-only политику. После применения старые клиенты должны получить новый launcher ticket.

Миграция безопасности намеренно не имеет автоматического fallback. Перед развёртыванием должны быть готовы backend issuer и Release-клиент. Для аварийного dev-доступа заранее добавьте только выделенный account и VPN IP в launcher_dev_account.

Проверка

После сборки и применения update:

  1. выпустить ticket для тестового account;
  2. убедиться, что прямой вход со старым паролем отвергнут;
  3. войти с ticket;
  4. убедиться, что строка удалена из launcher_ticket и появилась в launcher_ticket_consumption;
  5. повторить вход с тем же ticket и получить отказ;
  6. выпустить два ticket подряд и убедиться, что работает только второй.