Skip to content

撤销访问与审计操作 ​

撤销与审计回答不同问题。撤销阻止凭证继续被使用;审计记录已经发生了什么。系统两者都需要,且不能用其中一个推断另一个。

撤销路径 ​

委托凭证在缺失、过期、撤销、伪造或绑定其他用户时必须 fail-closed。参考包一次性签发不透明 token,只保存哈希,并提供撤销与轮换操作。页面把安全凭证视图转换为 Surface 会话;token 本身不进入会话或响应。

撤销时:

  1. 存储提交撤销状态;
  2. 失效事件可以通知打开的客户端;
  3. 下一次 describe 或 invoke 重新检查凭证,在执行前失败;
  4. 页面停止把 Agent 显示为已连接。

事件总线是加速器。事件丢失不能让已撤销 token 继续可用。事实来源是存储的 introspect,且在下一次请求前检查。多实例部署需要共享存储或等价的强一致机制;两个独立内存存储不构成共享撤销系统。

Surface 审计 ​

Surface 审计是元数据,不是业务请求副本。当前事件包括:

  • 请求 id 与方法;
  • Agent id、会话 id、用户 id,以及可用时的租户;
  • 能力 id 与折叠记录 id;
  • 结果:completed、business_error、denied 或 failed;
  • 协议或业务错误码;
  • 耗时;
  • 可选公开 approval id。

它不包含输入参数、响应正文、Cookie、token 或审批秘密。这个限制是有意的:审计证明谁做了什么、结果如何;具体业务证据由业务后端按自己的合规保留规则保存。

审批关联 ​

高风险操作需要真人审批时,审计应能把已执行请求与已消费审批 challenge 关联。使用公开 approval id,不要把 token 或 hash 返回给 Agent。关联查询失败不一定改变业务结果,但缺失 approval id 必须作为审计完整性问题被运维看见。

绑定应包含请求 id、能力、记录、用户、Agent、会话、规范化参数 hash 与有效期。页面审批后端负责签发和消费;Surface 只把公开 id 交给审计出口,并在返回 Agent 前剥离审批证据。

运行时限额与防重放 ​

限流在执行前检查,并按已验证会话隔离。自定义限流器抛错或返回非法决定时 fail-closed。防重放作用于 invoke;窗口内重复请求 id 被拒绝,不再次执行。不同会话可以复用 id,窗口外重试在业务层面也不自动幂等。

运维演练 ​

  • 请求等待时撤销 Agent;确认下一次调用在执行器前失败。
  • 断开事件流;确认 introspect 仍拒绝已撤销 token。
  • 重启一个网关实例;确认页面重新连接或开始新会话。
  • 批准危险请求;确认审计有公开 approval id,Agent 响应没有。
  • 强制审计写入失败;确认业务结果不变,错误可见。
  • 复用 invoke id;确认没有第二次副作用。

有用的承诺不是“网关记录了一切”,而是“系统能证明哪个会话发起了哪项声明调用、是否完成、是否有真人审批,同时不把凭证或业务载荷写进日志”。

参见委托与信任边界与安全与信任中心。