【标题】 【生活娱乐赛道】HRPAuth——面向游戏社区的一站式账号认证与身份管理平台
【正文】
1. Demo 简介
是什么:基于 Go + Gin 框架实现的 Minecraft 第三方认证后端,完整兼容 Yggdrasil 协议,可作为 Authlib-Injector 的后端,让 Minecraft 客户端在第三方服务器完成"正版登录"。
面向谁:
- 自建我的世界(MC)服务器的服主,希望脱离 Mojang 账号体系
- 校园 / 局域网 / 家庭场景下希望统一管理玩家身份的管理员
- 想学习 Yggdrasil 协议、Token 状态机、皮肤签名链路的后端开发者
主要功能(2–3 个核心):
- Yggdrasil 全套鉴权端点:
/authserver/authenticate、/refresh、/validate、/invalidate、/signout、/sessionserver/.../join、/hasJoined、/profile/:uuid,含clientToken幂等与互踢逻辑。 - 皮肤 / 披风纹理系统:上传 PNG → SHA-1 哈希 → 用 RSA 私钥签名 → 通过
/textures/:hash公开分发,客户端可校验签名。 - 本站账号体系:邮箱注册、图形验证码、邮箱 6 位验证码、TOTP 两步验证、IP 限流;独立 Remember Token 用于本站前端业务。
2. Demo 创作思路
灵感来源:authlib-injector 让任意服务都可以"伪装"成 Mojang 认证服务器,但社区已有的后端要么是官方 Java 版(重、依赖多),要么散落在各处缺少整合。希望做一个单文件 Go 二进制即可启动、配置即用、同时支持 Yggdrasil + 本站业务的最小可用后端。
想解决的问题:
- 中小 MC 私服主缺乏一个"开箱即用"、不依赖 JDK / 复杂中间件的认证 + 皮肤后端。
- Yggdrasil 协议里的 token 状态机(
valid→temporarily_invalid→invalid→ 物理删除)、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.go 中 parseSecurityConfig 改读顶层 security 节点;startup_controller.go 默认配置生成同步;API_DOC_FE.md / API_DOC.md 文档同步 |
6a45f3e29decba53afead4ec |
文档按功能模块拆分 + 修正非邮箱登录描述 | 将文档拆为 docs/overview.md、tokens.md、data-models.md、endpoints/*;同步 references/API_DOC_FE.md;修正 feature-flags.md 中 non_email_login 默认值与作用范围 |
6a45fdb59decba53afead61d |
authlib-injector 联调中皮肤互不可见的诊断 | 解释 Minecraft 客户端在游戏中会调用的多个皮肤 API;给出后端验证 hasJoined 签名 / 公钥 / 转发配置的排查清单 |