ADR-0007 认证设计
- 状态:已接受
- 日期:2026-10-22
shared/auth 已定义 Auth 接口(Authenticate/Validate/Refresh/SignOut,token 为不透明字符串)。需确定 token 形态、口令哈希、会话存储与 Web 前端登录方案。
- Yggdrasil/API token 用不透明随机串,不用 JWT:
authenticate返回accessToken+clientToken;服务端会话存 Postgres(sessions表),validate/refresh/join均查服务端状态,撤销即时生效。 - refresh 轮换:
Refresh校验clientToken绑定,换发新accessToken并轮换 refresh token。 - 口令哈希 Argon2id(不用 bcrypt/PBKDF2)。
- Web 前端用 httpOnly session cookie(独立于 Yggdrasil token);Hoard 程序化上传用不透明 API token(
api_tokens表)。 - Zitadel/OIDC 可选替换
Authenticate的数据源,但保持同一Auth接口与 token 语义。
2026-10-27 修订:本 ADR 写就时全站只有一个口令凭据、一个
Authenticate原语。 ADR-0012 把它拆成“网站主密码”与“启动器按玩家发放的独立密码”两条互不相通的校验路径, 并规定网站会话不再代表任何玩家。token 形态(不透明随机串 + 服务端会话 + 即时撤销)不变。
- 正:可撤销、语义贴近 Mojang(clientToken 绑定客户端)。
- 负:
hasJoined热路径每次查会话,需 Redis 缓存(ADR-0003 已预留)。

