Skip to content

Premium (online-mode) verification always falls back to offline — Mojang hasJoined returns 204 #32

Description

@Vicohenn

Environment:

  • TrueUUID version: 1.2.0 (Forge 1.20.1)
  • Minecraft: 1.20.1, Forge 47.4.20
  • Server: online-mode=false, hosted on a Pterodactyl-based panel (EnxadaHost)
  • Client: CurseForge App launcher, logged into a genuine Microsoft/Mojang premium account (confirmed via official Minecraft launcher, not just CurseForge login)
  • Client and server are running the identical.jar file

Description:
When a player with a verified premium Mojang account connects, TrueUUID falls back to offline mode instead of verifying successfully. Investigating further, the server's call to Mojang's Session Server (/session/minecraft/hasJoined) returns HTTP 204 (No Content), which per Mojang's API means the session hash/serverId wasn't recognized.

Server log at time of login:

[Server thread/INFO] [cn.al.tr.Trueuuid/]: TrueUUID login_complete outcome=offline player=XxXxX uuid=eb389807-b43a-332b-9b89-8818da4824d4 auth_source=offline_fallback

Client log confirms the mod loaded correctly:

Game/cn.alini.trueuuid.Trueuuid (modloading-worker-0) Info TrueUUID 已注册配置
Game/cn.alini.trueuuid.Trueuuid (modloading-worker-0) Info TrueUUID 已经加载

What I've already ruled out:

  • Network/firewall blocking Mojang endpoints on the server — confirmed working, since switching temporarily to online-mode=true (vanilla auth, no TrueUUID) let the same premium account log in successfully.
  • Client not logged into premium account — confirmed via official launcher (CurseForge opens the real Minecraft/Microsoft launcher for auth).
  • Version mismatch between client and server — confirmed identical .jar on both sides (trueuuid-1.2.0-forge-1.20.1.jar).
  • Proxy/NAT hiding client IP — per your own docs, the ip parameter to hasJoined is optional and shouldn't cause this.

Suspected cause:
Given the above, this looks like the serverId/session hash computed by the client's local joinServer call doesn't match what the server sends to Mojang's hasJoined — possibly related to how the SHA-1 digest is converted to Mojang's expected signed hex format (the well-known two's-complement quirk in the vanilla Crypt.digestData/session hash implementation). Any mismatch there would cause hasJoined to always return 204 regardless of account validity.

Steps to reproduce:

  1. Set up server with online-mode=false + TrueUUID 1.2.0
  2. Install identical TrueUUID 1.2.0 on client
  3. Connect with a verified premium Microsoft/Mojang account
  4. Observe outcome=offline auth_source=offline_fallback in server log despite valid premium session

Expected behavior: outcome=verified, UUID replaced with the official premium UUID.

Additional note: I'll be testing with v1.1.0 and v1.1.1 shortly to check if this is version-specific, and will update this issue with results.

IMG-20260804-WA0010.jpg

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions