两家厂商,一个缺失的产物
Descope 的 Agentic Identity Hub 3.0 与 ServiceNow 的 AI Passport 都是对同一个真实问题的合理回应:非人类调用者的增长速度已经超出了身份栈当初设计所能承载的范围。两款产品采取了相似的架构立场。Agent 获得一个凭证,该凭证被提交给网关或 API,接收服务决定是否认可这次调用。围绕这两项公告的媒体报道都将此描述为身份领域的突破(Descope 报道、ServiceNow 报道。
两者都假定了一件它们都没有交付的东西。每一份护照、每一个枢纽、每一种凭证格式,都预设企业侧存在一个可解析的主体:一个稳定的 Agent 标识符、一个具名所有者(人类或系统)、一个已定义的范围,以及一个生命周期。在大多数组织中,这样的注册表并不以任何权威形式存在。Agent 主体散落在 Terraform 状态、Kubernetes 服务账户命名空间、厂商控制台,以及由最后被升级处理该问题的人维护的电子表格中。
影子 Agent 是可见的症状。病因是不完整的主体目录。当没有一个规范的地方来注册 Agent 时,团队就会在工作发生的地方注册它,由此产生的清单是一组彼此割裂的局部视图,任何治理流程都无法将其调和。针对一个模糊主体签发的凭证并不能解决这个问题;它只是给一个未解决的问题加上了一个密码学签名。

护照无法证明什么
凭证证明的是谁在调用。它并不证明调用者在那一刻被授权做什么,也不证明该授权是否仍然有效。这些是目录问题,需要由凭证格式并不携带的数据来回答。
考虑一条委托链。一名人类操作员授权一个编排 Agent,该 Agent 派生出一个子 Agent,子 Agent 调用一个工具。每一跳都可能铸造一个派生令牌。只有当这条链具有终止状态时,它才是健全的:当人类的授权被撤销时,下游每一个派生令牌都必须变得不可用。缺少这一属性,撤销就只是建议性的。子 Agent 会继续工作,因为它的令牌是在链仍然有效时签发的,而令牌中没有任何东西携带指回目录条目的指针,从而无法使其失效。
这就是长期存在的服务账户问题,只是换了一套新词汇。一个带有静态密钥且永不过期的服务账户之所以危险,是因为没有任何东西强制进行审查。一个没有生命周期绑定的 Agent 护照是同样的形态:它在签发时证明身份,却对其背后的主体是否仍然存在、是否仍拥有同一个所有者、是否仍持有相同的范围只字不提。
解决这一问题的一个具体机制是让凭证短时有效,并将每个令牌绑定到某个注册表修订版本。令牌携带一个主体标识符和一个注册表版本戳。网关不能只信任签名;它必须在请求时针对注册表解析该主体,如果注册表修订版本已经越过令牌的版本戳,且这种变化改变了范围或所有权,就拒绝该调用。这样一来,撤销就变成一次注册表写入,而传播速度取决于网关刷新其注册表视图的快慢,而非取决于已签发了多少令牌。
诚实的权衡是延迟与耦合。现在每个请求都涉及一次目录查找,或一个具有较短存活时间的缓存视图。这次查找是一个依赖项:如果注册表不可用且缓存已过期,默认的故障关闭策略会拒绝合法流量。选择故障开放以保护可用性的团队则重新引入了最初的问题,因为从网关的视角看,一个陈旧的缓存和一个已被撤销的主体看起来完全一样。设计决策不在于是否添加这个依赖,而在于把它放在哪里,以及当它失效时如何限定影响范围。
注册表优先的顺序
实际的排序是:注册表,然后是范围,最后是凭证格式。在主体目录存在之前就选择护照产品,意味着该产品将针对任何可用的清单进行配置,而那正是导致问题的割裂清单。
从枚举 Agent 主体开始。对每一个主体,记录:
- 一个稳定的标识符,它不是当前的运行时名称,因为运行时会改名
- 一个所有者,以目录对象而非工单中的团队名称来表示
- 该 Agent 可以行使的范围,以明确的资源与操作对表示
- 一个到期或审查日期,使任何主体都不会默认无限期有效
- 它所参与的委托链,包括哪些主体可以派生它
这是一项不起眼的工作,但正是这项工作决定了下游的一切是否站得住脚。一份只产出 Agent 名称列表、没有所有者和范围的枚举不是注册表;它只是一份清单,无法支撑撤销。
范围变更应当是有变更控制的事件,并记录审批人。机制本身不如属性重要:当某个 Agent 的范围集合发生变化时,要有记录表明是谁在何时批准了该变更,并且该变更产生一个新的注册表修订版本。网关和沙箱读取的正是这个修订版本。为 Agent 环境做配置的沙箱应当从注册表读取范围,而不是从与 Agent 代码一起提交的清单中读取,因为清单会漂移,而注册表才是事实来源。
同一个注册表也应当为凭证签发方提供支撑。当签发方铸造令牌时,它从注册表读取主体和范围集合,并盖上修订版本戳。当所有者变更时,注册表随之变更,下一次签发就会反映出来。当某个主体被退役时,注册表将其标记为已退役,网关会拒绝携带该标识符的令牌,无论签名是否有效。

治理预算应该花在哪里
先购买一种凭证格式的直觉是可以理解的。护照和枢纽是可演示的,它们对应一条采购条目,并能产出一个可见的产物。而注册表产出的是一张电子表格和一堆关于所有权的争论,这更难呈现,也更难获得资金。
但凭证是目录的下游。针对一个无法解析的主体签发的护照,是一个无法对照任何权威来源进行验证的签名断言,而基于此类断言进行路由的枢纽,不过是为它本应暴露的那些影子 Agent 提供了一条仪表完备的通道。注册表才是让凭证变得有意义的产物,也是必须首先存在的那一个。先为枚举、所有权模型和撤销路径提供资金,然后再选择从它们读取数据的格式。
常见问题
为什么凭证本身并不足够? 凭证在签发时证明身份。它不携带当前的范围、所有权或生命周期状态,因此无法回答调用者在调用发生的那一刻是否仍被授权。
是什么让委托链可撤销? 目录中的终止状态。当发起方人类的授权被撤销时,派生令牌必须变得不可用,这要求网关针对注册表修订版本来解析令牌,而不是只信任签名。
最小可行的 Agent 注册表是什么? 一个稳定的主体标识符、一个由目录支撑的所有者、明确的资源与操作范围、一个审查或到期日期,以及该主体所参与的委托关系。
注册表优先的身份方案的主要成本是什么? 每个请求都依赖一次目录查找或一个短时缓存。故障关闭以注册表故障期间的可用性为代价保护正确性;故障开放以撤销保证为代价保护可用性。
