绑定 Minecraft 在线账户

目前 projectGDT 支持三种 Minecraft 在线账户的绑定。

不强制使用自建的认证系统,而是保持与其他形式 Minecraft 在线账户的兼容,这也是 projectGDT 的优势所在。

Minecraft Java 版正版账户 (Microsoft)

  1. web-panel 将用户重定向至 Microsoft OAuth2 的登录页面。

  2. 用户在页面中输入 Microsoft 账户的用户名、密码后,该页面再将用户重定向回 web-panel,此时的重定向 URI 包含 authCode

  3. web-panel 使用 authCode,先后调用 XBL 服务、XSTS 服务、Minecraft Service,获得 minecraftAccessToken

  4. minecraftAccessToken 发送至 daemon,由 daemon 调用 Minecraft Service 得到用户的 UUID 和玩家代号。

Minecraft Java 版外置登录账户 (LittleSkin)

web-panel 将用户重定向至 LittleSkin OAuth2 的登录页面,后续过程与正版账户的绑定相近。

Minecraft 基岩版账户 (XBOX LIVE)

  1. web-panel 向 daemon 请求,获得一串 6 位验证码,显示给用户。

  2. web-panel 拉起 Minecraft 基岩版,添加认证服务器链接。

  3. 用户连接认证服务器,并在随后弹出的窗口内输入该验证码。

  4. 认证服务器记录用户的 XUID 和玩家代号,连同验证码传递给 daemon。

  5. 用户被踢出认证服务器,同时 daemon 向 web-panel 推送事件。

  6. web-panel 显示认证完成。

以上认证方式为笔者原创,暂定名为server-assisted-xbox-auth。

目前存在的问题之一是:Minecraft 基岩版的版本繁多,且不同版本之间互不相通。对于每个协议版本(Protocol Version),理论上必须架设一个服务端以完成此项工作——这是不现实的。我们只能选择一些“主流”服务端版本,这进而大大增加了工作量,并且需要长期维护。Geyser 支持更多的基岩版版本,但这只是权宜之计。如果你有解决此问题的方法,愿不吝赐教。

笔者曾经研究过 XBOX LIVE 的认证 API,但最终因资料庞杂而放弃。如果你有在网页端完成所有认证流程的方案,愿不吝赐教。

Last updated