Skip to content

🚧 Roadmap — 本页描述的能力尚在路线图中,概念与设计已定型,接口与操作步骤以正式发布为准。

需要人批准时:异步授权

读完本指南,你将知道:

  • 哪些操作不该被任何预先授权覆盖
  • "Agent 暂停、带外找人批、只批这一次"的流程长什么样
  • 超时、拒绝、审批人不在时该怎么设计

前置条件

  • 已理解 Consent 与审批 的三种"人说了算"时刻
  • 已有可触达审批人的带外通道(推送、IM、邮件、短信)
  • 明确哪些操作需要逐次审批——这是产品决策,不是技术决策

什么操作需要逐次审批

判断标准很简单:做错了能不能撤回

特征例子是否需要逐次审批
不可逆转账、删除批量数据、发出对外邮件需要
高金额或高影响超过阈值的采购、生产环境变更需要
涉及第三方权益代客户签署、代客户下单需要
可撤回、影响面小查询、生成草稿、内部报表不需要——预先授权足够

不要把所有操作都设成需审批。审批疲劳会让人闭眼点同意,那时审批就成了摆设。

流程:一次审批的六步

以"Agent 想执行一笔超阈值转账"为例:

  1. Agent → 你的应用:请求执行转账。
  2. 你的应用 判断这笔操作命中审批策略(金额、类型、对手方),不直接执行,而是发起一次审批请求,说清三件事:
    • Agent 想做什么(收款方、金额、用途)
    • 影响什么(从哪个账户出、是否可撤回)
    • 为什么现在问你(触发了哪条策略)
  3. 带外通道 把审批请求推给负责人。Agent 此时处于挂起状态,不占用资源、不重试。
  4. 负责人 在自己的设备上批准或拒绝。审批界面必须显示完整上下文——批准人要能看懂自己在批什么
  5. 批准 → 发放一枚仅限该次操作的授权:绑定这一笔转账的参数,一次性使用,短时有效。拒绝或超时 → 操作终止,Agent 收到明确失败原因。
  6. 无论结果,审批事件入审计链:谁批的、什么时候、批的是什么参数(见 审计与追责链)。

关键设计点:授权绑定操作参数。如果批准的是"转 5000 元给 A",那么这枚授权不能用来转 5000 元给 B,也不能转 50000 元给 A。参数变了就要重新批。

设计建议

默认拒绝。 超时未批 = 拒绝,不是"继续执行"。这一条写进策略,不留可配置的余地。

审批请求要有过期时间。 一个小时前的转账请求,现在批准还合适吗?给审批请求设短窗口,过期作废。

审批人不能是发起人。 结构上禁止自审批——这条在 Agent 场景下尤其重要,因为"发起人"可能是一个 Agent,而它的技术负责人正好也是审批人。

要有降级路径。 审批人休假、通道故障、系统不可用时,Agent 应当停下来并明确报错,而不是绕过审批继续执行。

标准与协议

这个模式在标准侧对应 CIBA(Client-Initiated Backchannel Authentication,OpenID Foundation):由后端发起认证请求、用户通过带外通道确认。它解决的正是"审批人不在 Agent 的会话里"这个结构性难题——Agent 没有浏览器可以重定向,只能靠后端去找人。

授权范围的表达则与 RFC 9396 Rich Authorization Requests 的思路一致:不只声明 scope,还声明这次授权绑定的具体资源与参数。

常见问题

审批会不会让 Agent 变得很慢? 会——这正是设计意图。需要审批的操作本来就不该"快"。把审批范围收窄到真正不可逆的操作上,其余走预先授权。

能批准一次、之后同类操作都免批吗? 可以做成策略(如"同一对手方、单笔低于阈值、24 小时内免批"),但要显式配置、可审计、可撤回。默认不要开。

Agent 挂起期间怎么办? 设计成无状态等待:Agent 记下请求 ID 退出,审批结果到达后由回调或轮询恢复执行。不要让 Agent 长时间占着连接空等。

下一步