AgoraIO-Extensions / AgoraIO-Extensions/agent-infra

feat(connection): manage Agent Consumer PAT binding per user and instance

Open
#457 5 comments 0 reactions 1 assignee Claimed by @guoxianzhe View on GitHub
enhancement ready-for-human
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
8h 51m
Merged PRs (30d)
99

Description

## Problem

RehoboamAI 当前通过部署级 `CONNECTION_TOKEN` 和 `CONNECTION_ALLOWED_USERS` 使用一个 Connection PAT。该方式只适合单用户 Pilot;一旦扩大 allowlist,多个 Rehoboam 用户会共享同一 Connection Principal、Provider Connection、Grant、撤销和审计边界,存在跨用户账号继承风险。未来还会有多个 Agent,部署级 PAT 也无法对单个用户和 Agent 独立签发、撤销和审计。

现有 Connection PRD/HLD 把 PAT 主要描述为 Portable Direct Consumer token instance,并把多用户服务描述为 Delegated Consumer。产品现已确认 RehoboamAI 继续使用 MCP + PAT,但必须按“当前 Rehoboam 用户 + 当前 Agent”分别持有 PAT;实现前需同步权威文档和评审边界。

## Scope

- Connection Web 增加通用“Agent 接入”管理页;管理员在 DB 中注册任意 Agent Consumer 的稳定 ID、名称、固定 HTTPS callback、启用状态和服务凭据 hash。服务凭据明文只在创建或轮换时显示一次。
- Connection 代码、Helm 和运行环境不得包含 RehoboamAI 或其他 Agent 的专属 callback/secret 配置;RehoboamAI 只是首个使用该通用协议的 Agent Consumer。
- Connection 保持独立服务,不依赖 Agent Platform 或 Rehoboam 内部数据库。
- `RehoboamAI` 保持稳定 Consumer;每个已验证的 Rehoboam 用户与 Agent 组合建立独立 TOKEN ConsumerInstance 和独立 PAT。
- 一个 Connection PAT 可以访问该 Principal 为 RehoboamAI 已授权的多个 Provider;GitHub、Confluence、Jira、Bitbucket 等 Provider Connection/Credential 仍分别建立和授权,不为每个 Provider 重复签发 PAT。
- 新增短期、一次性、不可重放的 PAT binding session。绑定链接只携带 opaque state,不携带 PAT、Provider Credential、Rehoboam 用户邮箱或可信身份选择器。
- 企业微信机器人、Rehoboam Web 和 Portal 终端共用同一绑定协议:各渠道只负责生成/展示一次性链接和接收最终状态,不实现三套授权逻辑,不轮询 Connection。
- Connection 在已认证 browser session 中确认当前 Principal、目标 RehoboamAI ConsumerInstance、PAT 名称和有效期;PAT 明文仅通过受认证的单次服务端领取交付给 Rehoboam,不进入 redirect URL、浏览器历史、聊天消息、日志或审计 detail。
- Rehoboam 使用服务端已验证的当前用户和 Agent ID 创建 binding session,按 `user + agent` 加密保存 PAT;模型输入、请求 payload 或渠道自报字段不能替换绑定身份。
- Rehoboam MCP client 每次调用按当前 `user + agent` 解析 PAT,不再使用部署级共享 `CONNECTION_TOKEN`;未绑定、已撤销、过期、用户或 Agent 不匹配时 fail closed。
- 用户可以从 Rehoboam Web、企业微信返回的管理链接或 Portal 链接查看安全状态并解绑。解绑撤销目标 PAT/ConsumerInstance,不删除 Provider Credential,也不影响同一用户其他 Agent、其他用户、Codex 或其他 Consumer。
- 保留当前五个通用 MCP tools 和 READ-only Pilot 门禁;本票不开放 WRITE Action。
- 更新 Connection PRD、工程 Spec、HLD 和必要 ADR,使 PAT Consumer、ConsumerInstance、Grant 共享范围、服务端单次领取与 Rehoboam Consumer 边界一致。
- 迁移期间旧部署级 PAT 只允许现有单用户回滚使用;不得通过扩大 allowlist 作为正式多用户方案。

## Acceptance criteria

- [ ] **AC-1:** Alice/Agent-A、Alice/Agent-B、Bob/Agent-A 分别拥有不同 PAT hash、TOKEN ConsumerInstance 和可独立撤销的生命周期记录;数据库和 API 不保存 PAT 明文。
- [ ] **AC-2:** 企业微信、Rehoboam Web 和 Portal 生成的绑定链接使用同一协议,state 有明确过期时间、单次消费和重放拒绝;无需定时轮询。
- [ ] **AC-3:** PAT 只能由 Connection 当前 browser Principal 确认签发,并只能被发起 binding session 的已注册 RehoboamAI 服务端单次领取;redirect、消息、日志、trace 和审计不包含 PAT。
- [ ] **AC-4:** Rehoboam 根据服务端认证的当前用户和 Agent ID选择 PAT;请求或模型伪造 user、email、agent、consumer、instance、connection/account selector 均不能改变身份。
- [ ] **AC-5:** Alice 的请求不能使用 Bob 的 PAT;Agent-A 不能使用 Agent-B 的 PAT;非绑定用户和 Agent 看不到且不能执行 Connection tools。
- [ ] **AC-6:** 撤销 Alice/Agent-A 后该组合立即失效,Alice/Agent-B、Bob/Agent-A、Codex 与其他 Consumer 继续可用。
- [ ] **AC-7:** 同一用户/Agent 的一个 PAT 可以调用多个已分别授权的 Provider;新增 Provider 只新增 Provider Connection/Grant,不重复签发 PAT。
- [ ] **AC-8:** Rehoboam 不再依赖部署级共享 PAT 提供正式多用户能力;旧 `CONNECTION_TOKEN` 路径保持单用户回滚边界且不能与按用户绑定静默混用。
- [ ] **AC-9:** Connection 与 Rehoboam 均覆盖绑定、单次领取、过期、重放、撤销、跨用户、跨 Agent 和敏感数据负向测试。
- [ ] **AC-10:** 线上受监督验收至少使用两个 Rehoboam 用户和两个 Agent 验证身份矩阵,并完成 GitHub READ;验收证据只记录账号标识摘要和状态,不记录普通用户内容或任何 Token。
- [ ] **AC-11:** Connection PRD、工程 Spec、HLD/ADR 与实现保持一致,明确 RehoboamAI PAT 模式是批准的 Consumer profile,不泛化为任意服务绕过 Delegated identity。

- [ ] **AC-12:** 新增第二个 Agent Consumer 只需在 Connection Web 注册并在该 Agent 部署 Secret 中保存其服务凭据;Connection 与 Helm 无需增加 Agent 专属变量或代码分支。

## Validation

- agent-infra:Connection Core/API/Store/Web 定向测试、临时 PostgreSQL 集成、跨 Principal/ConsumerInstance 负向测试、`pnpm check`、`pnpm check-types`、`pnpm test`、`pnpm build`、`pnpm smoke`、Docker build、Markdown/link/workflow policy 和 `git diff --check`。
- Rehoboam:binding session/API/storage/MCP client 单元与集成测试、企业微信/Web/Portal 入口测试、跨用户和跨 Agent 负向测试、受影响 Agent suite、lint/type/config checks。
- 线上:两个用户、两个 Agent、至少两个 Provider 的绑定/读取/撤销矩阵;确认无共享 PAT fallback、无 Token 泄漏、无轮询。

## Blocked by

None

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.