跳到主要内容

Agent 也需要身份,DID 可能是最合适的起点

Robert
Agent IdentityDIDVerifiability

Agent 最终要有自己的身份。这不是给每个进程分一个 UUID,也不是把 API Key 换个名字。一个真正能代表人或组织做事的 Agent,至少要能回答几件事:谁控制它的长期身份,谁授权它做这次操作,眼前这个运行实例是不是获准的那个,以及出了问题能不能马上收回权限。

今天很多 Agent 还只是某个产品里的一个功能。它读一组环境变量,连几个工具,停掉进程就没有了。平台当然可以给它账号、token 和日志,这在单一系统里足够方便。但一旦它要跨组织工作,换模型、换云、换设备,或者替人执行有后果的操作,平台账号就不再等于身份。它只能证明“这个平台把它叫作什么”,很难证明它是谁、代表谁、权限从哪里来。

我的判断是:Agent 的根身份不应永久属于任何一个平台,Agent 的实际权力也不应由它自己声明。 前者需要一个可携带、能由控制者证明的身份锚点;后者需要明确的委托、范围、期限、撤销和审计。DID 很可能是目前最适合承担前一层的开放标准,但它绝不是后面所有问题的答案。

身份不是账号,也不是一把万能钥匙

人类互联网是先把服务跑起来,后来才慢慢补登录、权限和身份恢复。早期单机电脑开机就用,谁会在意多个用户、跨机器协作和权限隔离?等到网络和服务连成一片,账号被盗、账户被关、数据被锁在单一服务商手里,才发现这些不是边缘问题。

Portable identity is more than a platform account and API key

DID can anchor identity; authorization and runtime proof still need design.

Agent 的节奏会快得多。一个被盗用的人类账号,可能发几封钓鱼邮件;一个能调用代码部署、采购、设备或数据工具的 Agent,可能在很短时间内并行做很多错误操作。NIST 在 2026 年启动 AI Agent Standards Initiative,并把 Agent 的身份、授权与安全列为研究重点。这说明问题已经不是“Agent 要不要登录”,而是怎样让人、组织、Agent 和资源之间的授权关系能够被看见、限制和追溯。[1]

但这里最容易犯一个错误:把“身份自主”理解成“Agent 可以自己给自己授权”。不是。一个 Agent 可以控制自己的标识符,却不能因此证明自己有权支付、发布生产代码,或代表一家公司签署什么。控制密钥只证明控制密钥,和业务授权是两回事。

DID 提供锚点,不提供万能证明

W3C 的 DID Core 在 2022 年成为 Recommendation。它定义的是一种可解析的标识符和对应的 DID Document。该文档可以包含验证方法和服务端点,DID 的主体可以是人、组织、设备、数据模型,也可以是软件。标准的重点是让控制者能够用密码学方式证明对标识符的控制,而不必先向某个中心化身份提供商申请许可。[2]

这正好适合 Agent 的长期连续性。一个 Agent 迁移到另一台机器、换了模型提供商,甚至重建了运行实例,仍可以沿用一个长期身份,或者在必要时把身份分成根身份和任务身份。它不必把“我是谁”完全绑在某一家平台的账号系统上。

不过 DID 不会自动给它信誉、职位或权限。DID Core 本身也把认证之后如何处理、需要什么保证等级留给具体方法和应用决定。[2] 这里需要 Verifiable Credentials。VC 让一个签发者对某个主体作出可验证声明,例如“这个 Agent 由某个组织登记”“它可处理这一类工单”。验证者仍然要决定是否信任签发者,凭证也需要有效期、状态和撤销策略。[3]

所以比较可靠的结构不是“给 Agent 一个 DID,问题就解决了”,而是把几层分开:DID 负责长期标识和控制证明,凭证表达第三方声明,委托限定谁可以做什么。少了后两层,DID 只是一个很好的名字和一组密钥。

现有技术不会消失,它们要各做各的事

把 DID 当作 Agent 的长期身份锚点,并不等于 OAuth、MCP 或 SPIFFE 都该被替换。它们回答的本来就是不同的问题。

MCP 的 HTTP 授权基于 OAuth。它处理的是“这个客户端能否代表资源所有者访问这个 MCP server”,并要求服务端验证 token 是否确实为自己这个资源签发。[4] 这是具体操作的访问控制,不是一个 Agent 跨系统、跨生命周期的完整身份模型。

SPIFFE/SPIRE 处理的又更靠近运行时:当前发出请求的,到底是不是那一个经过证明的 workload。它能依据节点和进程属性给 workload 签发短期凭证,并持续轮换。[5] 这对 Agent 很重要,因为长期身份并不能证明眼前这个容器或进程没有被替换、复制或劫持。但 SPIFFE 的 trust domain 仍由运营者管理,它不取代一个可跨组织携带的长期身份。

更合理的方向是分层协作:DID 给出可携带的长期锚点,VC 和委托表达来源与范围,SPIFFE 证明当前运行实例,OAuth/MCP 执行对具体资源的最小权限访问。DIF 的 Trusted AI Agents Working Group 正在把 identity、authority 和 governance 放在一起讨论,而不是只给 Agent 发一个编号。[6]

这套组合也有代价。DID 方法之间的互操作、密钥轮换和恢复、凭证状态、签发者信任、复制后的 Agent 是否还是同一个主体,都没有一个标准替我们做完。人类用户觉得复杂的地方,Agent 也许能把它自动化,但自动化并不会替我们做治理决定。尤其不能让语言模型直接掌握没有边界的长期密钥和权限。

趁历史包袱还轻,把边界先画出来

ArcBlock 在 2018 年研究 DID,2019 年把它纳入核心技术栈。这并不能证明我们已经提前知道 Agent 会走到今天,更不是本文结论成立的证据。它只解释了为什么我会特别在意这件事:身份一旦被某个产品的账号体系吞掉,等到跨平台协作成为常态,再把它搬出来会非常痛苦。我们 2022 年写下过这段选择的来由

现在的机会在于,Agent 生态还没有形成不可迁移的身份历史包袱。我们可以先把长期身份和单一模型厂商、云平台或应用商店分开,也可以先规定实际权限必须有委托、范围和收回机制。以后产品形态会变,今天的协议也会变,但这两条边界不该变。

一个平台账号能让 Agent 登录,一把 API Key 能让它调用工具,一张运行时凭证能说明当前进程来自哪里。它们都很有用,却没有哪一个单独回答“这个 Agent 在平台之外是谁,又凭什么代表谁”。DID 不是完整答案,但它给了这套问题一个可以开始验证的锚点。


  1. NIST, AI Agent Standards Initiative
  2. W3C, Decentralized Identifiers (DIDs) v1.0
  3. W3C, Verifiable Credentials Data Model v2.0
  4. Model Context Protocol, Authorization
  5. SPIFFE, A Day in the Life of an SVID
  6. DIF, Trusted AI Agents Working Group

本页涉及

术语

  • Agent

    当 agent 代表人或服务完成一项工作,真正需要说明的是三件事:谁在行动、代表谁、这次行动被允许做什么。把它们分开,授权和后续核验才有明确对象。

  • DID

    DID 是一种数字身份标识。它帮助持有者和验证方确认某个身份由谁控制,也让一项声明有明确的关联对象。账户、登录和授权各自仍有自己的角色。

  • did:abt

    ArcBlock 的 DID 方法,使用 did:abt: 命名空间标识账户、资产及其他对象。解析器需要支持这一方法。