Вход без пароля, права админа и F3+B
Аутентификация переделана по схеме пользователя: лаунчер — единственный
источник токена, сервер проверяет его сам и лаунчера не спрашивает.
- rsx-auth/GameToken: токен это base64url(payload) + "." + base64url(HMAC-SHA256),
payload {uuid, nick, aud, exp, jti, typ}, typ = session или reload.
- Сессия живёт час, reload-токен полтора часа и только внутри игры. Пакет
SessionReload продлевает сессию и выдаёт новый reload-токен.
- Сервер проверяет подпись, аудиенс, срок и совпадение uuid. HTTP-запрос к
лаунчеру из сервера убран.
- Клиент: окно пароля убрано совсем, ник берётся из токена, клиент сам
продлевает сессию за 5 минут до конца.
- Для локальной разработки сервер с --dev-token пишет свой токен в
world/dev-token.txt, клиент берёт токен оттуда.
- Права админа: свой список world/admins.txt, перечитывается раз в 5 секунд,
поэтому право снимается на лету. Пакет AdminState.
- Ванильные блоки мира ломает только админ, режим игры прав не даёт.
- F3+B только для админов: без прав показываем отказ, с правом включаются и
ванильные хитбоксы, и наш отладочный рендер. Права сняли посреди просмотра —
гаснут сразу.
- run-game.ps1 умеет -Token.
Проверено на живом сервере: own session ok, player in, rights of Player given.
Тесты: протокол 34, сервер 88, форк собирается чисто.
This commit is contained in:
@@ -817,7 +817,52 @@ MovementInputFromOptions` и `RsxPlayerTuning` с числами.
|
||||
регистрирует свои коробки.
|
||||
- Область: наши структуры (узлы, мусорка, постройки) и игроки с зонами.
|
||||
|
||||
### 2.11 Декомпил ремейка лежит на диске
|
||||
### 2.11 Вход без пароля (сделано)
|
||||
|
||||
**Схема пользователя — её нельзя менять:**
|
||||
|
||||
> 1. Лаунчер при заходе предлагает войти. Он обращается к **AUTH-серверу**: есть ли
|
||||
> доступ к игре у этого пользователя. Нет — идёт нахер. Да — пропускает.
|
||||
> 2. При запуске игры лаунчер передаёт игре **токен** и **uuid (без ника)**; ник игра
|
||||
> получает из токена+uuid.
|
||||
> 3. Игра интерпретирует и проверяет токен, и при заходе на сервер передаёт **наш
|
||||
> uuid и личный токен** (полученный **только для этого сервера**).
|
||||
> 4. Сервер проверяет валидность uuid+личного токена **сам** и, если ок, пускает в игру.
|
||||
> **Сервер лаунчер не спрашивает. Ролей от лаунчера не получаем.**
|
||||
> 5. **Внутри игры пароля нет и логин-окна быть не должно.**
|
||||
> 6. Если сессия просрочилась в игре — **reload-token** продлевает сессию на час, сам
|
||||
> reload-token живёт 1.5 часа. Он **только внутри игры** и не влияет на reload-token
|
||||
> аккаунта (чтобы не логиниться в лаунчер каждый раз).
|
||||
|
||||
**Что сделано у нас:**
|
||||
|
||||
- **Токен**: `base64url(payload).base64url(HMAC-SHA256(payload))`, payload =
|
||||
`{uuid, nick, aud, exp, jti, typ}`; `typ` = `session` | `reload`. Ключ — в конфиге
|
||||
сервера (`--token-key`), общий с auth-сервером. Класс `rsx-auth/GameToken`.
|
||||
- **Сессия**: 1 час. **Reload-токен**: 1.5 часа, выдаётся вместе с сессией;
|
||||
пакет `SessionReload` → продление на час + новый reload-токен.
|
||||
- **Сервер** проверяет подпись, аудиенс (свой сервер), срок и совпадение uuid — сам,
|
||||
без обращения к лаунчеру. HTTP-запрос `/auth/validate` из сервера убран.
|
||||
- **Клиент**: окно ввода пароля **убрано совсем** (нет ни полей, ни кнопки Connect);
|
||||
ник берётся из токена; клиент сам перезапрашивает сессию за 5 минут до конца.
|
||||
- **Для локальной разработки**: сервер с `--dev-token <аккаунт>` выдаёт свой токен и
|
||||
пишет его в `<world>/dev-token.txt`; клиент берёт токен оттуда.
|
||||
|
||||
### 2.12 Права админа и F3+B (сделано)
|
||||
|
||||
- **Список — свой, у сервера**: `<world>/admins.txt` (по строке на аккаунт),
|
||||
перечитывается каждые 5 секунд → **права снимаются на лету**. Лаунчер про роли
|
||||
ничего не сообщает.
|
||||
- Пакет `AdminState` — сервер шлёт при входе и при каждом изменении.
|
||||
- **Ванильные блоки мира ломает только админ** (режим игры прав не даёт) — правило
|
||||
п. 2.3.
|
||||
- **F3+B — только для админов.** Без прав показывается «only an administrator may look
|
||||
at the boxes». Наш отладочный рендер (`/rsx hitboxes`) включается тем же F3+B.
|
||||
Права сняли посреди просмотра → и ванильные хитбоксы, и наш рендер гаснут сразу.
|
||||
- Отладочный рендер показывает и коробки структур, и зоны игрока (голова красная,
|
||||
тело жёлтое, ноги синие), и области LOD.
|
||||
|
||||
### 2.13 Декомпил ремейка лежит на диске
|
||||
|
||||
`G:\src-decoded` (5207 файлов, строки расшифрованы), также `G:\src`,
|
||||
`G:\builds\v31\src{,-decoded}` и `G:\decompiled-rustex`. Это **исходники клиента
|
||||
|
||||
Reference in New Issue
Block a user