Skip to content

🧪 Beta — 能力已可用,接口契约可能微调。

审计与追责链

出了事,你需要在十分钟内回答三个问题:谁授权的、以谁的身份做的、具体做了什么。

传统日志答不上来。因为 Agent 用的是共享凭证,日志里只有一行"服务账号 X 调用了接口 Y"——授权的人是谁、代表谁行动,全都不在记录里。

GenAuth 的解法是给每次授权发一个编号,让后面发生的一切都挂在这个编号上。

为什么 Agent 需要它

人的操作有天然的追责路径:账号就是人。Agent 打断了这条路径——同一个 Agent 可能代表一百个不同的人,在一百个不同的授权下行动。日志里必须同时记下两个主体(委托人与执行者)和一个授权依据(哪次授权允许了这件事),缺一个就断链。

这不只是运维需求。合规审计、安全事件复盘、客户问询,三类场景问的都是同一件事:把这次访问追回到那个做决定的人

三个必答问题,三个字段

问题答案来自说明
谁授权的?sub(委托令牌与访问令牌里的主体)永远是人。Agent 不能自己给自己授权
以谁的身份行动?sub + act(访问令牌)sub 是被代表的人,act 标明实际执行的 Agent(字段结构见 Token 与 Claim 参考
做了什么?audit_id + grant_id 串起的事件序列一次授权的全生命周期事件

两个 ID 的分工:

  • grant_id:一次授权记录的 ID。回答"这是哪一次授权"——范围、期限、批准人都挂在它上面。
  • audit_id:审计链 ID。回答"这次授权后续发生了什么"——签发、兑换、访问、吊销,逐条挂在它上面。

工作原理

  1. 用户 完成授权确认,GenAuth 生成 grant_idaudit_id,写入首条审计事件(授权已批准:谁批的、批了什么范围、多长时间)。
  2. GenAuth 签发委托令牌,令牌 claims 内嵌 grant_idaudit_id——这两个 ID 从此随令牌走,不依赖调用方传递。
  3. Agent 兑换访问令牌时,兑换事件带着同一个 audit_id 入链,并生成本次兑换的 exchange_id
  4. 你的资源服务 校验访问令牌后处理请求。把令牌里的 sub / act / audit_id 记进你自己的业务日志——这是链条从 GenAuth 延伸到你的业务侧的接缝(做法见 保护你的 API)。
  5. 吊销发生时(主动撤销或到期),终止事件同样挂在这条链上——吊销本身也是审计对象:谁在什么时候收回了什么。

一条链长什么样

员工数据助手的场景为例(示意值):

text
audit_id: aud_demo_7f3c9a
├─ [10:02:11] 授权已批准    批准人 usr_demo_0001 · Agent report-agent
│                          scope [webagent.web_search:run, webagent.web_search:read] · 有效期 7200s
│                          grant_id: grant_demo_51ab
├─ [10:02:12] 委托令牌已签发  jti: jti_demo_9c02 · 过期 12:02:12
├─ [10:02:15] 令牌已兑换     resource: webagent · exchange_id: exc_demo_2d17
│                          scope [webagent.web_search:run]
├─ [10:02:16] 资源访问       sub usr_demo_0001 · act report-agent · 你的业务日志接入点
├─ [10:41:53] 密钥已停用     操作人 admin_demo_02 · 原因 安全响应 · 后续签发已停止
└─ [12:02:12] 令牌已过期

链上任意一行都能回答三问。反过来,从一条业务日志里的 audit_id 也能倒查回最初那次授权。

设计要点:审计链在服务端生成,不由调用方声明

audit_idgrant_id 由 GenAuth 生成并内嵌进令牌,调用方无法伪造或替换。这保证了链条的完整性——攻击者即使拿到令牌,也无法把行为记到别的授权名下。

你需要做的两件事

  1. 业务侧记录接缝字段:在处理 Agent 请求的日志里,至少记下 subact.agent_idaudit_id。少了这三样,GenAuth 的链条就到你的 API 边界为止。
  2. 保留期与访问控制:审计数据的保留期限与查询权限按你的合规要求配置。查询与导出的操作方式见 审计与合规报告

标准与协议

  • 令牌内 sub / act 的双主体表达遵循 RFC 8693 的委托语义(GenAuth 对 act 有扩展,解析注意事项见 Token 与 Claim 参考)。
  • 审计事件本身不构成对外协议,字段以 API 响应为准。

下一步