HRPAuth -- 一个 Go 实现的 Yggdrasil 兼容 Minecraft 认证后端

【标题】 【生活娱乐赛道】HRPAuth——面向游戏社区的一站式账号认证与身份管理平台

【正文】

1. Demo 简介

是什么:基于 Go + Gin 框架实现的 Minecraft 第三方认证后端,完整兼容 Yggdrasil 协议,可作为 Authlib-Injector 的后端,让 Minecraft 客户端在第三方服务器完成"正版登录"。

面向谁

  • 自建我的世界(MC)服务器的服主,希望脱离 Mojang 账号体系
  • 校园 / 局域网 / 家庭场景下希望统一管理玩家身份的管理员
  • 想学习 Yggdrasil 协议、Token 状态机、皮肤签名链路的后端开发者

主要功能(2–3 个核心):

  1. Yggdrasil 全套鉴权端点/authserver/authenticate/refresh/validate/invalidate/signout/sessionserver/.../join/hasJoined/profile/:uuid,含 clientToken 幂等与互踢逻辑。
  2. 皮肤 / 披风纹理系统:上传 PNG → SHA-1 哈希 → 用 RSA 私钥签名 → 通过 /textures/:hash 公开分发,客户端可校验签名。
  3. 本站账号体系:邮箱注册、图形验证码、邮箱 6 位验证码、TOTP 两步验证、IP 限流;独立 Remember Token 用于本站前端业务。

2. Demo 创作思路

灵感来源:authlib-injector 让任意服务都可以"伪装"成 Mojang 认证服务器,但社区已有的后端要么是官方 Java 版(重、依赖多),要么散落在各处缺少整合。希望做一个单文件 Go 二进制即可启动配置即用同时支持 Yggdrasil + 本站业务的最小可用后端。

想解决的问题

  • 中小 MC 私服主缺乏一个"开箱即用"、不依赖 JDK / 复杂中间件的认证 + 皮肤后端。
  • Yggdrasil 协议里的 token 状态机(validtemporarily_invalidinvalid → 物理删除)、clientToken 幂等、皮肤签名链路零散,社区文档不完整。
  • 本站业务系统(注册/验证码/TOTP)需要在 Yggdrasil 之外独立成体系,与游戏端 token 不混用。

为什么做这个方向

  • Go 单文件部署、go build 一行完成,部署成本最低。
  • Yggdrasil 协议体量适中(authserver + sessionserver + 资料 API 约 10 个端点),可在可控周期内完整跑通。
  • Token 状态机 + RSA 签名是项目的核心难点,值得深做并沉淀文档(项目自带 docs/tokens.md 详细说明状态转换)。

3. Demo 体验地址(三选一)

体验入口:  https://backend.auth.samuelcheston.com/

4. TRAE 实践过程

整个项目通过 TRAE 协作完成,覆盖架构设计 → 编码 → 重构 → 文档全流程。关键步骤与证据如下。

4.1 关键步骤(建议附 3+ 张截图)

# 阶段 TRAE 产出 建议截图内容
1 项目骨架与初始化 一句话让 TRAE 搭建 Gin + GORM + Redis 的项目结构,配置 config.yaml 自动生成
2 Yggdrasil 协议实现 借助 TRAE 对照 Yggdrasil 文档实现 10 个核心端点,包含 clientToken 幂等 / 互踢逻辑
3 Token 状态机 设计 valid → temporarily_invalid → invalid → 删除 的状态机,/refresh 接受 temporarily_invalid 实现"抢回会话"
4 皮肤/纹理签名链路 上传 PNG → SHA-1 → RSA 私钥签名 → /textures/:hash 分发
5 配置重构security.* 路径变更) yggdrasil.security.enable_captcha 改为顶层 security.enable_captcha
6 文档拆分 把单文件 API_DOC.md 拆为 docs/ 下按模块的多个 md

4.2 关键任务对话 Session ID(≥3 个)

以下 Session ID 均来自本项目在 TRAE 中的真实协作记录,可在 TRAE 内按 Session ID 回溯完整对话:

Session ID 任务主题 关键产出
6a43ae913710bd22e2061067 调整 captcha 开关配置路径 config/config.goparseSecurityConfig 改读顶层 security 节点;startup_controller.go 默认配置生成同步;API_DOC_FE.md / API_DOC.md 文档同步
6a45f3e29decba53afead4ec 文档按功能模块拆分 + 修正非邮箱登录描述 将文档拆为 docs/overview.mdtokens.mddata-models.mdendpoints/*;同步 references/API_DOC_FE.md;修正 feature-flags.mdnon_email_login 默认值与作用范围
6a45fdb59decba53afead61d authlib-injector 联调中皮肤互不可见的诊断 解释 Minecraft 客户端在游戏中会调用的多个皮肤 API;给出后端验证 hasJoined 签名 / 公钥 / 转发配置的排查清单

1 个赞

这项目太硬核了,不过没看见有项目链接或者截图欸,期待成品是什么样的 :saluting_face:

不明觉厉,投就完事了