安全边界
AgentHub 的安全模型把身份、产品权限、本地执行、IM 事件和模型 API 凭据分为不同层级处理。公开文档只描述边界和原则,不记录生产主机、secret、回滚路径或私有证据。
身份
TokenDance ID 是身份权威:
- GitHub、Google、Feishu 等第三方 provider 由 TokenDance ID 管理。
- AgentHub 作为 OIDC relying party 消费 TokenDance ID。
- Hub Server 发行 AgentHub 本地 session。
- Desktop/Web 的低风险个性化不能当作 Hub API 授权。
不要把飞书 OAuth、GitHub OAuth 或 Google OAuth 写成 AgentHub 直连登录。
公开官网登录边界要刻意收窄。它可以做产品站个性化,也可以证明 TokenDance ID 跳转链路,但不能作为 Hub API 授权、Edge target 访问或 runtime 执行权限已经完整的证据。
授权
认证之后的授权由 AgentHub 产品本地处理:
- 用户是否属于某个组织或项目。
- 用户是否能访问某个 workspace、设备或 Edge。
- 用户是否能启动、取消、审批或查看某个 run。
- 用户是否能读取 diff、artifact、日志和审计记录。
权限判断应写入 Hub 审计日志,被拒绝的动作也要可追踪。
授权应发生在具体动作上,而不是只在页面加载时判断。用户打开项目视图、启动 run、批准工具调用、读取 diff、下载 artifact、路由到 Edge target,都是不同的权限决策,也应该分别可审计。
Secret 与凭据
以下内容不能进入前端、卡片 payload、公开日志或公开文档:
- 模型 API key。
- Feishu verification token、encrypt key、app secret、tenant token。
- TokenDance ID client secret。
- Hub session signing secret。
- Edge 本地执行 secret。
- 生产主机路径、备份路径和回滚命令。
TokenDance API key 是模型 API 调用凭据,不是 AgentHub 登录凭据。
公开示例只使用占位符,并避免把真实值放进截图。如果示例需要一个看起来像凭据的字段,使用 <agenthub_session_token>、<local_edge_token> 或 <provider_api_key> 这类名称,并说明归属。不要发布真实 callback payload、refresh token、provider 响应或本地 secret 路径。
本地执行与沙箱
Edge Server 靠近文件系统和进程边界,默认应更保守:
- 使用 workspace allowlist 限制可访问目录。
- 高风险工具调用需要审批。
- Runtime adapter 运行在净化环境中。
- 文件变更通过 diff 和 artifact 暴露给用户审查。
- 失败、取消、超时和权限拒绝都要产生事件。
Remote/Cloud Edge、设备证明和 relay/provisioning 仍在开发中,不能写成已经完整可用。
本地执行默认按最小权限处理。UI 应在执行前暴露高风险操作,Edge 层即使在 UI 被绕过时也要执行 workspace policy,adapter 输出应先转成结构化事件,再展示到 Web、Desktop 或 IM 界面。
Feishu/Lark 安全
Feishu/Lark 是协作入口,不是身份系统:
- 事件进入业务逻辑前必须校验签名和解密。
card.action.trigger需要 3 秒内响应。im.message.receive_v1用message_id去重。- 卡片 action 只携带 action id 和业务对象 id。
- 飞书账号绑定回到 TokenDance ID 完成。
耗时工作应尽快离开 webhook 请求路径。Integration Gateway 先确认、入队,再由 AgentHub 通过后续卡片或消息事件更新用户。Raw prompt、完整文件内容、provider key 和本地绝对路径不应复制进卡片 payload。
审计
建议审计以下事件:
- 登录、登出、会话刷新和绑定状态变化。
- 项目成员、设备、workspace allowlist 和权限变更。
- Run 创建、取消、失败、完成和审批。
- 工具调用、文件变更、diff、artifact 和 preview。
- IM 事件处理结果和外部平台错误码。
日志默认不记录完整 prompt、消息全文、secret 或模型原始响应中的敏感内容。
最小可用审计记录应包含 actor、organization/project、目标 Edge 或 workspace id、run id、action、result、timestamp、request id,以及脱敏后的拒绝或失败原因。私有证据保留在运维 workspace;公开文档描述形状,不公开生产日志流。