Skip to content

Commit 06d292f

Browse files
committed
security(auth): require verified Microsoft Java account for game launch
Remove local-only player creation/selection/launch paths in account manager, desktop session, UI and core launch guards. Keep legacy account records and existing worlds/instances intact, add fail-closed regression coverage and AppID compliance documentation. Mojang AppID approval and live/native acceptance remain open.
1 parent 19b8afa commit 06d292f

27 files changed

Lines changed: 317 additions & 499 deletions

File tree

‎AGENTS.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SyntaxLauncher is a modular Minecraft launcher written primarily in Kotlin. The
1010

1111
The launcher must ultimately be able to support:
1212

13-
- explicit offline/non-premium player profiles alongside official Microsoft accounts, with a persistent player manager separate from game instances;
13+
- Microsoft-authenticated player profiles only, with a persistent player manager separate from game instances; historical local-only rows are inert and preserved only for recovery;
1414
- official Microsoft/Minecraft authentication for premium accounts;
1515
- multiple Minecraft versions;
1616
- automatic Java runtime selection and installation;
@@ -166,15 +166,15 @@ Create abstractions when there are at least two realistic implementations or whe
166166

167167
## 8. Authentication and security rules
168168

169-
**22 October 2026 maintainer correction:** The maintainer explicitly reaffirmed offline/non-premium support and a player profile manager alongside Microsoft accounts. This supersedes the earlier authenticated-only product change made for AppID review. Keep offline selection explicit; never silently fall back after Microsoft failure or impersonate verified identities. Microsoft launches still require fresh official entitlement/profile checks. The official AppID form requires authentication/ownership regardless of server configuration: document that conflict honestly, preserve the actual b915ad2 submission record, and do not claim this dual-mode revision meets that requirement or has approval.
169+
**Current product requirement — 24 October 2026:** Only a Microsoft account with a freshly validated Minecraft Java entitlement/profile may launch. Never reintroduce local-only gameplay, nickname-based identities, synthetic sessions, or fallback after failed authentication. Enforce this in UI, DesktopLauncherSession, MinecraftLaunchCoordinator and LaunchPlanBuilder. Preserve legacy user files/worlds without allowing their identities to launch. The AppID remains unapproved: see [docs/APPID_COMPLIANCE.md](docs/APPID_COMPLIANCE.md) for outstanding validation and external website/Entra checks.
170170

171171
- Premium authentication must use official Microsoft/Xbox/Minecraft authentication flows.
172172
- Never collect or store a user's Microsoft password.
173173
- Desktop OAuth must use an appropriate browser-based authorization flow with PKCE where applicable.
174174
- Access and refresh tokens must never be written to normal logs.
175175
- Sensitive credentials must not be committed.
176176
- Prefer OS credential/keychain storage for long-lived secrets once premium authentication is implemented.
177-
- Offline accounts must never be presented as a way to bypass authentication on `online-mode=true` servers.
177+
- No game can start without an officially authenticated and freshly verified Minecraft Java entitlement/profile, regardless of the server's online-mode setting.
178178
- Do not implement mechanisms intended to impersonate premium identities or defeat server authentication.
179179

180180
## 9. Logging rules

‎README.md‎

Lines changed: 15 additions & 23 deletions
Large diffs are not rendered by default.

‎docs/APPID_COMPLIANCE.md‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Minecraft Services AppID — current compliance and verification
2+
3+
**Status: implementation changes submitted to GitHub; AppID allowlist approval NOT confirmed.**
4+
This document describes the intended Microsoft-only game launch policy, not a Mojang certification.
5+
Code review, automated fixtures, and successful packaging are not substitutes for an approved AppID or live Microsoft account tests.
6+
7+
## Required launch invariant (all OSes, all instances, all server configurations)
8+
9+
- **Only** Microsoft accounts with a verified Minecraft: Java Edition entitlement and Java profile can launch Minecraft through SyntaxLauncher.
10+
- Login takes place in the system browser using Microsoft OAuth authorization-code with S256 PKCE and random `state`, then Xbox user authentication, XSTS, Minecraft Services token, `/entitlements/mcstore` (Java entitlement), and `/minecraft/profile` (Java UUID/name).
11+
- Every Play requires a fresh refresh/exchange and ownership/profile verification; sign-in alone, the presence of a cached username, and an Xbox token alone do not prove Java ownership.
12+
- The UI does not offer local-only player creation or selection. Missing ID, expired/failed refresh, unverified identity, missing entitlement, invalid profile, zero/blank access token or missing client ID block launch **before game preparation**.
13+
- The core coordinator and launch-plan builder also reject non-Microsoft identities and invalid credentials, independently of UI state. No automatic identity substitution or session fallback is permitted.
14+
- Historic identity rows remain on disk for backup only. They are never exposed as playable accounts; worlds, instances, resource packs, mods, saved settings and their directories must never be deleted as an authentication migration side effect.
15+
- Verification code must not print access/refresh tokens, full command lines, credentials, private support logs or user data to CI artifacts.
16+
17+
## Evidence and regression gates
18+
19+
| Gate | How to verify | Status |
20+
| --- | --- | --- |
21+
| No unauthenticated launch entry point | Check account picker, session Play, core coordinator and LaunchPlanBuilder | Code review and tests; hosted CI required |
22+
| Java entitlement and profile | Xbox/XSTS -> Minecraft token -> Java entitlement -> profile | Automated fixtures implemented; real AppID acceptance **pending** |
23+
| Existing player/world data retention | Load older account inventory, reject legacy launch, check unchanged saved instance worlds | Regression fixtures, hosted CI required |
24+
| Native vault & OAuth PKCE | Windows DPAPI, macOS Keychain, Linux Secret Service; system browser | Native and real-account acceptance **pending** |
25+
| Live purchased-account gameplay | Sign in, restart, token rotation, signed-in online-mode server, Java profile | **Blocked pending Mojang AppID approval** |
26+
| Packaging/release | GitHub Actions Windows/Linux/macOS; no credential leakage | See commit-specific CI run, not inferred from previous runs |
27+
| Public pages & Entra metadata | Recheck and synchronize displayed product scope, owner/contact, privacy and terms | **External verification required** |
28+
| Brand compliance | Clear independent publisher identity, contact and prominent non-affiliation disclaimer | Confirm on actual UI, store/listings and landing pages |
29+
30+
## Remaining external and product risks
31+
32+
1. Mojang reviews AppID submissions at its discretion and does not provide a detailed rejection reason. Passing the above gates **cannot guarantee approval**.
33+
2. The project website, privacy/terms/support pages and Microsoft Entra registration must be reviewed against the new authenticated-only build. Updating repository Markdown does **not** automatically update deployed web pages or Entra metadata.
34+
3. The public Client ID is an identifier, not a secret or a substitute for allowlisting. Do not rotate it to evade review, use another launcher's ID, or claim Mojang endorsement.
35+
4. Review domain ownership/publisher identity separately from Microsoft Entra publisher verification. Neither verification is assumed complete.
36+
5. Mods and modpacks may execute arbitrary third-party code: do not redistribute proprietary Minecraft client files or bundle unauthorized game assets. Review download origins and licenses.
37+
6. Verify official Mojang/Microsoft terms and the live AppID form before each new application, especially if their conditions change.
38+
39+
## Official materials
40+
41+
- AppID Review: https://aka.ms/mce-reviewappid
42+
- Minecraft Usage Guidelines: https://www.minecraft.net/en-us/usage-guidelines
43+
- Minecraft EULA: https://www.minecraft.net/en-us/eula
44+
- Microsoft Entra terms/privacy registration: https://learn.microsoft.com/en-us/entra/identity-platform/howto-add-terms-of-service-privacy-statement
45+
- Technical implementation and submission summary: [MICROSOFT_APP.md](MICROSOFT_APP.md)
46+
- Review checklist and unresolved evidence: [APP_REVIEW_2026-10.md](APP_REVIEW_2026-10.md)
47+
48+
**NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.**

0 commit comments

Comments
 (0)