Вход без пароля, права админа и 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:
sasheg dev
2026-10-22 08:50:57 +03:00
parent cf90f71e58
commit d2a0a7a93b
21 changed files with 1478 additions and 543 deletions
+9 -8
View File
@@ -5,13 +5,14 @@
# Stage first if run\classpath.txt is missing:
# python tools\stage_run.py <run> ..\..\game-fork\build\classes <meta>
param(
[string]$Run = 'G:\RustNotMC\run',
[string]$Java = '',
[string[]]$ExtraArgs = @(),
[int]$Width = 1280,
[int]$Height = 720
)
param(
[string]$Run = 'G:\RustNotMC\run',
[string]$Java = '',
[string[]]$ExtraArgs = @(),
[string]$Token = '',
[int]$Width = 1280,
[int]$Height = 720
)
$ErrorActionPreference = 'Stop'
$root = 'G:\RustNotMC'
@@ -56,7 +57,7 @@ $javaArgs += '--version'; $javaArgs += '1.12.2'
$javaArgs += '--gameDir'; $javaArgs += $Run
$javaArgs += '--assetsDir'; $javaArgs += $assets
$javaArgs += '--uuid'; $javaArgs += '00000000000000000000000000000000'
$javaArgs += '--accessToken'; $javaArgs += '0'
$javaArgs += '--accessToken'; $javaArgs += $(if ($Token) { $Token } else { '0' })
$javaArgs += '--userType'; $javaArgs += 'legacy'
$javaArgs += '--versionType'; $javaArgs += 'release'
$javaArgs += '--width'; $javaArgs += "$Width"