Skip to content

feat(auth): add native AgentID sign-in and account binding - #236

Merged
LIghtJUNction merged 7 commits into
mainfrom
feat/agentid-native-login-20261009
Oct 9, 2026
Merged

LIghtJUNction merged 7 commits into
mainfrom
feat/agentid-native-login-20261009

Conversation

@LIghtJUNction

Copy link
Copy Markdown
Contributor

实现

为 msg 的原生登录系统接入 AgentID,不引入 Better Auth、第二套账号、额外依赖或数据库表。默认关闭;生产配置仍须单独启用。

  • 登录页和账号绑定页增加 AgentID,复用现有浏览器会话、签名批准、账号绑定和移除机制。
  • 固定 AgentID issuer、授权、token 和 JWKS 地址;验证发现文档、ES256/P-256 签名、audience、nonce、时间和回调 iss。原有提供方仍固定 RS256。
  • 使用注册时选定的客户端认证方式,AgentID 默认 client_secret_basic;secret 仅由现有受限私有文件读取,不进入网页、Git 或测试记录。
  • PKCE S256、浏览器绑定的单次 state;从发起登录刷新十分钟 cookie,支持等待页。/login/agentid 作为控制台发起入口,只能发起登录,不能通过参数指定绑定目标、注册或任意返回地址。
  • 保持现有注册政策:仅 Google/邮箱可创建账号。AgentID 需先在 /account/login-methods 绑定已有 MSG 账号;不按邮箱自动合并,不改变已有私钥或权限。不请求 owner scopes 或刷新凭据。

验证证据

独立验收 run 37939100028 已完成,结论 success。

  • 修改前登录基线:150 passed,0 failed / 0 skipped。
  • 修改后六个测试文件:222 passed,0 failed / 0 skipped,包含新增 72 项。
  • Ruff check、Ruff format check、Python -W error -m compileall -q src、依赖检查和 git diff --check 通过。
  • 使用真实 PostgreSQL、真实 ES256 签名,以及隔离的模拟提供方 HTTP。覆盖错误签名/算法/声明、JWKS 轮换、地址固定、客户端密钥发送方式、回调发行者、重复回调、跨浏览器请求、等待后继续、注册限制与已有账号绑定。
  • 六个文件:test_agentid_providers.py、test_agentid_account_login.py、test_login_providers.py、test_account_login.py、test_account_login_core.py、test_oauth.py。

已下载并核对 证据 artifact 11621730571:包含两份 XML、两份原始测试日志、源代码补丁、已验证提交与源码树。

验证提交:e5ce51805547703066cf558cd52b563d94133b8f。
验证树:1c90cd1680d912209fac8af680232cee40da6fea。
证据 ZIP SHA256:d1a6529a1425257a685e8363f2388c95f83fdb363bce3997f9983162c201694e。

后续 5af646f2eb0b22b5995567d4264c6e87b0996259 只删除已完成的临时工作流,没有改变任何已测试源码。临时应用脚本也已删除。最终差异仅 10 个实现、测试和配置文档文件。第一次尝试原有 142 项通过,但两个测试辅助函数重名触发 Ruff;修正后才获得上述验收成功,不隐去失败尝试。

生产接入

AgentID Console 使用自定义接入,不是 Better Auth 示例路径:

字段 值
Redirect URI https://msg.lmm.best/-/login/callback/agentid
Sign-in page https://msg.lmm.best/login
Initiate login URL https://msg.lmm.best/login/agentid

将 [login.providers.agentid] 合并进实际实例配置;[login].enabled 与 [oauth].enabled 需为 true。填写已有注册客户端 ID,secret 保存在服务账号可读的独立文件,建议权限 0600。此前通过聊天传递的 secret 应先在控制台重新生成;本 PR 和测试没有使用或保存它。

未修改 AgentID Console、服务器配置或生产密钥;未部署、未执行真实 AgentID 登录,未验证整个仓库全部 CI。 合并和部署前仍需检查完整 CI,完成控制台地址配置、密钥轮换、账号绑定及一次真实登录。Draft 保留这些上线门槛。

官方协议依据:https://www.agentid.com/docs/custom

未改动 Rust 迁移分支或 PR #235。编辑环境没有可用的 MSG 签名身份,本次未创建生产身份或协调帖。

@LIghtJUNction
LIghtJUNction marked this pull request as ready for review October 9, 2026 14:26
Copilot AI balanced review requested due to automatic review settings October 9, 2026 14:26
@LIghtJUNction
LIghtJUNction merged commit 02da873 into main Oct 9, 2026
27 of 30 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review ✅ Completed 2026-10-09T14:32:47.979560Z 5af646f Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants