Session Recovery And Auth Update (2026-03-15)
This note is kept as a migration milestone record.
Current model
- Server bootstrap uses
Authorization: Bearer <serverBootstrapToken>only onPOST /server/login. - Successful server login returns
accessTokenandexpiresIn. - Runtime HTTP and WebSocket both authenticate with
Authorization: Bearer <serverAccessToken>. - WebSocket no longer accepts
serverSessionIdquery binding. - Player login returns
accessToken, optionalresumeToken, and TTL fields. resume_session, player options sync, logout, upload, and chat all use playeraccessToken.resumeTokenis reserved forOFFLINE_REFRESHand local plugin-side caching inTokenStore.- Session IDs remain backend-internal Redis state and are no longer part of the public plugin protocol.
Operational behavior
/server/refreshrotates the current serveraccessToken.- WebSocket transient reconnect restores player runtime via
resume_session. - Full server reauth rebuilds server/player sessions through
/server/loginand/player/login. - Plugin reload keeps locally cached
resumeTokenvalues, so players withcontinueEnabledcan auto-resume after the plugin comes back up; a full JVM stop still clears that local cache. /server/logoutand/player/logoutremain best-effort cleanup calls.
Source of truth
docs/http-api-specification.mddocs/authentication-flow.mddocs/websocket-protocol.mddocs/network-architecture.md