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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions