AI教程

A2A Agent Card 怎样发现与认证?能力声明、任务状态和跨域安全

从公开AgentCard、认证扩展卡、协议接口、任务状态与推送通知五条链路验收A2A智能体,并附48项可复现的互操作与安全测试。

A2A Agent Card发现来源协议协商身份授权和任务证据四层信任边界
本页目录
  1. Agent Card 到底解决什么问题
  2. 公开卡是发现面,不是机密配置仓库
  3. 技能描述帮助路由,但不能代替执行权限
  4. 怎样发现卡片并确认它来自正确的主体
  5. Well-known 适合开放发现,但要锁定最终来源
  6. 注册表解决目录管理,不替你承担信任决定
  7. 首次信任与日常刷新采用不同策略
  8. 卡片结构、协议版本和接口怎样验收
  9. supportedInterfaces 要与真实监听能力一致
  10. 版本兼容不能靠字符串大小比较
  11. 签名、哈希和 TLS 各自证明不同事情
  12. 认证、授权与扩展 Agent Card 如何分层
  13. 安全方案必须与端点和身份提供商对得上
  14. 扩展卡按认证会话替换,不能污染公共缓存
  15. 能力可见不等于能力可调用
  16. 任务状态、流式响应和推送通知怎样避免越界
  17. 状态机要拒绝非法跳转与旧消息覆盖
  18. 重复通知必须幂等,通知端点必须受限
  19. artifact 是数据载体,不是可信指令
  20. 从预发布到生产应按什么顺序实施
  21. 建立四份清单再开始联调
  22. 灰度租户只给最小数据与可逆动作
  23. 上线门禁必须允许明确地说 blocked
  24. 四十八项互操作与安全验收
  25. 发现与卡片
  26. 身份与技能
  27. 任务与通知
  28. 数据、故障与恢复
  29. 官方证据、当前来源与适用边界
  30. 站内相邻任务怎样分工
  31. 核验日期和证据边界

A2A Agent Card 是客户端发现远程智能体的机器可读说明书,但它不是信任证明,也不是给智能体自动授权的通行证。上线时应把公开卡、认证后的扩展卡、真实协议端点和每次任务授权分开验证:先从受控来源取得卡片,校验结构、版本、接口和缓存,再按卡片声明完成身份认证,最后用允许与拒绝任务证明服务端确实执行对象级权限。只验证 JSON 能解析,无法阻止伪造端点、过度能力声明、缓存陈旧、跨租户泄露或高风险动作被误调用。

Agent Card 到底解决什么问题

Agent Card 的核心作用是让 A2A 客户端在发起任务前知道对方是谁、从哪个接口通信、支持哪些协议与能力、需要怎样认证,以及有哪些可被选择的技能。它缩短了发现和配置路径,却不会替客户端判断服务商信誉、技能真实性、数据处理承诺或动作风险。生产设计应把“声明”“握手”“授权”“执行结果”分别保存证据,避免把第一步成功误读成整条链可信。

公开卡是发现面,不是机密配置仓库

公开的 `/.well-known/agent-card.json` 适合放名称、描述、服务商、首选接口、协议版本、公开技能和认证方案提示。内部主机名、调试地址、租户列表、密钥、令牌、真实客户数据、未公开技能、管理员方法与基础设施拓扑不应进入公开卡。若不同身份需要看到不同能力,公开卡保持最小且稳定,用认证后的扩展卡按会话提供增量。这样既让未知客户端完成初始发现,又不把敏感能力目录暴露给所有扫描者。

技能描述帮助路由,但不能代替执行权限

技能的名称、说明、输入输出模式和示例会影响客户端或模型是否选择它们,因此描述变化本身就是策略变化。卡片写着“可退款”只表示服务宣称存在相关技能,不表示当前用户可以给任意订单退款;服务端仍需从可信身份上下文解析租户和主体,检查订单归属、金额、状态、批准与幂等。客户端也不应从自然语言描述推导额外权限。验收要保存技能目录哈希,并对同名、近似名、描述扩权和字段类型放宽建立变更门禁。

A2A Agent Card发现来源协议协商身份授权和任务证据四层信任边界
兰塞 AI 原创:卡片只处在声明层,后续每层都需要独立证据。

怎样发现卡片并确认它来自正确的主体

A2A 支持 well-known 地址、受控注册表和直接配置等发现方式。三种方式解决的是“去哪里取”,并不自动回答“这个域名是否属于预期组织”“返回内容是否被替换”“重定向后的主机是否仍在允许范围”。生产客户端需要把来源、DNS/TLS、重定向、内容类型、响应大小、最终 URL 和卡片身份一起验证,并对首次信任与后续更新采用不同门禁。

Well-known 适合开放发现,但要锁定最终来源

客户端从明确允许的 HTTPS origin 拼接规范路径,限制重定向次数并拒绝降级到 HTTP、私网地址、环回地址、云元数据地址和非常用端口。校验证书只能证明连接到证书覆盖的域名,仍应把域名与预期服务商、注册表记录或人工配置对应。若输入是完整卡片 URL,不要再次机械拼接 well-known 路径;若输入只是裸主机,也不要接受其中夹带用户信息、路径穿越或协议走私。所有发现失败都应显式返回,不得悄悄改用搜索结果中的同名智能体。

注册表解决目录管理,不替你承担信任决定

企业注册表可以记录所有者、审批状态、环境、允许租户、风险等级和卡片地址,适合动态发现与撤销;但注册表内容同样会过期或被错误配置。客户端要验证注册表响应身份、条目版本和撤销状态,再独立获取卡片并比较关键字段。公共目录、GitHub 列表和第三方市场只能作为发现线索,不能直接进入生产白名单。对被删除、转移所有权、域名更换或长期未维护的条目,应暂停自动连接并要求重新认领。

首次信任与日常刷新采用不同策略

首次接入需要人工确认组织、域名、数据边界、技能风险和认证方式;日常刷新可以使用 ETag、If-None-Match、max-age 与固定来源减少流量。任何接口地址、协议版本、安全方案、扩展、技能或服务商字段变化都应生成差异并重新评审,而不是因为 HTTP 仍为 200 就直接替换。客户端缓存卡片时保存取得时间、响应头、内容哈希和信任来源;卡片过期或条件请求异常时降级为只读或阻断高风险任务,不能无限使用陈旧能力。

卡片结构、协议版本和接口怎样验收

结构校验应从 JSON 语法继续走到 A2A schema、字段组合、协议绑定和真实端点。未知字段不一定恶意,却可能意味着客户端版本落后;未知必需扩展、无法识别的安全方案或不支持的协议版本必须阻断,而不是忽略后继续调用。卡片中首选接口只是服务端偏好,客户端应从双方共同支持的绑定中选择,并把实际使用的版本写入任务回执。

supportedInterfaces 要与真实监听能力一致

每个接口至少核对 URL、协议绑定、协议版本、内容类型和超时语义。首项表示偏好,不代表其他项可以不测试;HTTP+JSON、JSON-RPC 与 gRPC 的错误映射、流式行为和取消方式不同。客户端从卡片选择接口后,先执行无副作用探测,确认服务没有把旧路径重定向到登录页、营销页或另一租户。服务端发布卡片前也要反向检查声明端点真实可达,避免“卡片正确、接口不存在”的配置漂移。

版本兼容不能靠字符串大小比较

协议版本可能改变字段、well-known 路径、错误类型和能力名称。客户端维护明确的兼容范围与迁移测试,遇到未知更高版本时不应假设向后兼容;遇到旧字段时也不能同时信任新旧两套互相冲突的值。卡片迁移需要生成规范化视图,指出哪些字段只是改名、哪些含义变化、哪些默认值改变。任务执行时记录协商后的版本,方便在故障后重放同一语义,而不是只保存“最新版”。

签名、哈希和 TLS 各自证明不同事情

TLS 保护一次连接并认证域名;内容哈希帮助比较版本;卡片签名在正确验证密钥、算法、覆盖字段和时效时可提供内容来源与完整性证据。三者不能互相替代。若实现支持 `signatures`,客户端要从受信渠道取得验证密钥,拒绝卡片自带且未经绑定的任意公钥,并处理密钥轮换和吊销。没有签名时不应虚构签名保证,可以通过固定来源、注册表审批、TLS、差异审查和短缓存组合降低风险。

认证、授权与扩展 Agent Card 如何分层

Agent Card 声明 `securitySchemes` 与 `security`,用于告诉客户端需要哪种认证方式;凭据通常通过 HTTP 头传递,不放进 A2A 消息正文。认证只确认调用者身份或凭据有效,授权仍需服务端按技能、对象、动作、租户和当前任务判断。扩展 Agent Card 可以在认证后展示更多技能、配额或组织专属配置,但它不是把所有内部信息一次性返回给已登录用户的接口。

安全方案必须与端点和身份提供商对得上

OAuth2、API key、HTTP auth 或 mTLS 的声明要包含客户端真正需要的发现信息,同时避免嵌入秘密。OAuth 元数据、issuer、audience、scope、redirect URI 和令牌生命周期要与实际服务器一致;mTLS 还要验证客户端证书链、用途、吊销与租户映射。客户端拒绝未声明的认证挑战,也拒绝把为别的资源签发的令牌发送给当前智能体。服务端不能因为卡片列出某 scope 就跳过业务对象授权。

扩展卡按认证会话替换,不能污染公共缓存

客户端取得扩展卡后,可在当前认证会话内用它替换公共卡视图;缓存键至少包含主体、租户、权限上下文和卡片版本。注销、角色变化、令牌撤销或会话过期后,应清除扩展卡并回到公共卡。共享代理、CDN 与浏览器缓存不得把某个管理员的扩展技能返回给普通用户。服务端设置适当 Cache-Control 与 Vary,客户端仍要把扩展卡视为敏感配置,日志只记录哈希和必要字段,不复制完整内部目录。

能力可见不等于能力可调用

即使扩展卡向当前用户展示某个技能,每次调用仍要重新验权,因为角色、对象状态、预算和批准可能在卡片缓存期内变化。隐藏无权技能可以改善体验和减少枚举面,却不是安全控制。测试应先用高权限主体取得扩展卡并填充缓存,再切换低权限主体,验证目录、任务调用、历史读取和推送订阅都不会继承高权限结果;随后撤销高权限角色,确认已打开的会话也无法继续执行。

A2A公开Agent Card与认证扩展卡的会话缓存调用复验和撤销边界
兰塞 AI 原创:扩展卡按主体、租户和会话隔离,不能进入公共缓存。

任务状态、流式响应和推送通知怎样避免越界

A2A 不只交换一次请求与一次答案,还可能创建长任务、流式返回、暂停等待输入、生成 artifact,并通过推送通知异步更新。安全验收要把状态机和副作用联系起来:一个任务显示 completed,不一定证明下游动作成功;一个客户端超时,也不表示服务器没有执行。每个状态转换都需要可关联的任务 ID、主体、版本和业务回执。

状态机要拒绝非法跳转与旧消息覆盖

定义允许的状态转移、终止状态和重试规则,拒绝 completed 回到 working、canceled 后继续产生副作用、旧序列号覆盖新状态等情况。并发更新使用版本或序列号,消息与 artifact 都绑定任务和租户。客户端断线重连时从服务器读取权威状态,不根据最后一个本地事件猜测。人工补充输入前展示当前任务目标与数据边界,避免外部文本借“继续任务”扩展原始授权。

重复通知必须幂等,通知端点必须受限

推送可能因网络重试重复到达,客户端按事件 ID、任务 ID 和版本去重,不能每收到一次 completed 就重复付款、发布或发送。回调 URL 使用 HTTPS、域名白名单和最终地址验证,阻止 SSRF、DNS 重绑定和重定向到私网。每个订阅使用单用途短期令牌,服务端限制每任务配置数、速率、响应大小和失败重试次数。日志记录目标域名与结果,不记录完整令牌或敏感任务正文。

artifact 是数据载体,不是可信指令

文本、文件、图片、结构化数据和链接都可能来自远端智能体或其工具链,客户端要保留来源、媒体类型、大小、哈希和信任标签。下载先进入隔离区,文件名不决定真实类型;压缩包、宏、脚本和可执行内容不能自动打开。artifact 中要求调用另一个工具、上传本地文件或改变安全规则的文字仍属于不可信内容。只有用户原始任务和确定性策略可以扩大动作,模型对 artifact 的解释不能自行授权。

A2A任务从请求执行通知到恢复的状态与证据链
兰塞 AI 原创:任务状态、业务读回和回滚分别回答不同问题。

从预发布到生产应按什么顺序实施

最稳妥的路径不是一次启用所有技能,而是在隔离环境先建立一条最小只读链:固定卡片来源,校验 schema 与版本,选择一个接口,完成认证,调用一个无副作用技能,读取权威结果并撤销会话。随后逐步加入扩展卡、长任务、流式响应、推送和可逆写入,每扩大一个能力都重跑此前的正常与拒绝用例。高风险动作最后接入,并要求参数绑定批准、业务读回和可验证回滚。

建立四份清单再开始联调

第一份是身份清单,列客户端、最终用户、智能体服务、身份提供商、下游系统和租户;第二份是发现清单,列每个卡片来源、域名、注册表、缓存和变更负责人;第三份是能力清单,列技能、接口、协议、扩展、输入输出、数据等级和副作用;第四份是证据清单,为每个门禁指定 HTTP、日志、策略决定、业务读回或截图。清单中任何“由模型判断”“默认可信”或“以后补”都视为未完成。

灰度租户只给最小数据与可逆动作

灰度使用独立账户、测试数据、短期凭据、受限网络和明确预算,不让预发布智能体访问生产客户、真实密钥或全局管理接口。观察卡片刷新、技能选择、授权拒绝、任务时延、异常重试、通知失败和 artifact 处理。若需要人工介入,回执记录是谁在何时批准了什么参数,而不是只保存聊天中的一句同意。灰度结论只适用于当时的卡片哈希、服务版本、协议版本、策略和测试数据。

上线门禁必须允许明确地说 blocked

每项测试给出 passed、failed、blocked 或 not-applicable,并附理由和原始证据。缺少真实身份提供商、无法验证扩展卡隔离、回滚未跑通、官方规范与实现版本不一致时,应保持 blocked;排期、市场发布、演示成功和模型自述都不能覆盖。上线后继续监控卡片差异、认证失败、非法状态跳转、重复通知、跨租户命中和高风险动作,并设置独立停机开关。

四十八项互操作与安全验收

这组夹具用于预发布环境,不是产品能力排行榜。每项都固定卡片哈希、客户端与服务版本、协议绑定、主体、租户、输入、预期状态、副作用和清理动作。测试结果必须包含原始 HTTP 或 RPC 回执、策略决定、任务事件和必要的下游读回;模型口头说明不算证据。正常用例与拒绝用例成对运行,避免用“全部请求都失败”制造虚假安全。

发现与卡片

  1. DISC-01|规范 well-known 获取:测试条件为从已批准 HTTPS origin 获取公开卡,最终 URL、内容类型与响应大小符合策略。预期行为是保存请求、响应头、最终 URL、卡片哈希和来源审批;失败时不回退到搜索结果或同名域名。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  2. DISC-02|HTTP 降级:测试条件为把 HTTPS 重定向到 HTTP。预期行为是客户端拒绝降级并记录重定向链,且没有向降级目标发送任何凭据。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  3. DISC-03|私网重定向:测试条件为公开 URL 重定向到环回、私网或云元数据地址。预期行为是连接前后的地址检查都阻断,DNS 变化也不能绕过。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  4. DISC-04|相似域名:测试条件为使用拼写近似或国际化同形域名返回合法 JSON。预期行为是来源绑定失败;证书有效不能替代组织与域名归属核验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  5. DISC-05|注册表撤销:测试条件为已缓存条目在企业注册表中被撤销。预期行为是下次调用前撤销生效,高风险任务立即阻断,缓存不能继续授权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  6. DISC-06|直接配置变更:测试条件为人工配置的卡片 URL 改变主机或路径。预期行为是生成差异并要求重新批准,不静默跟随到新服务。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  7. CARD-01|JSON 与 schema:测试条件为缺失必填字段、错误类型和超大数组分别输入。预期行为是解析器给出确定错误并限制资源消耗,不以部分解析结果调用端点。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  8. CARD-02|未知必需扩展:测试条件为卡片声明客户端不支持且 required=true 的扩展。预期行为是客户端在发送任务前拒绝,并指出缺少的扩展 URI。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  9. CARD-03|未知可选扩展:测试条件为卡片声明未知但非必需扩展。预期行为是客户端忽略扩展增量但仍按基础协议工作,不能误读自定义字段。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  10. CARD-04|协议版本过新:测试条件为服务声明超出客户端兼容范围的版本。预期行为是明确阻断或选择双方支持的另一接口,不按字符串大小猜兼容。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  11. CARD-05|新旧字段冲突:测试条件为同一语义同时出现旧字段与新字段且取值不同。预期行为是客户端拒绝歧义并记录原始卡片,不能随意挑一个值。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  12. CARD-06|接口漂移:测试条件为卡片端点可取但首选协议端点返回营销页或登录 HTML。预期行为是无副作用探测识别内容类型不符并阻断任务。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  13. CACHE-01|ETag 条件刷新:测试条件为服务返回 ETag 后卡片未变化。预期行为是客户端使用条件请求并接受 304,同时保留取得时间和原内容哈希。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  14. CACHE-02|缓存陈旧:测试条件为卡片技能或安全方案已变但中间缓存仍返回旧版本。预期行为是到期后强制重验证;高风险动作在版本不确定时保持 blocked。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  15. CACHE-03|扩展卡缓存隔离:测试条件为管理员取得扩展卡后普通用户从同一设备访问。预期行为是缓存键包含身份与租户,普通用户看不到管理员技能、配额或内部地址。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  16. CACHE-04|注销清理:测试条件为用户注销后客户端离线重开。预期行为是会话扩展卡和令牌引用被清除,只能重新获取公共卡。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。

身份与技能

  1. AUTH-01|错误 audience:测试条件为签名有效但为另一个资源签发的令牌。预期行为是服务在技能执行前拒绝,日志记录受众不匹配但不记录完整令牌。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  2. AUTH-02|错误 issuer:测试条件为攻击者控制的发行方签发结构正确令牌。预期行为是客户端与服务端都按固定 issuer 拒绝,不从令牌内容动态信任发行方。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  3. AUTH-03|scope 过宽:测试条件为令牌含宽泛写权限但对象不属于当前主体。预期行为是业务对象级授权拒绝,scope 不能覆盖租户和所有权校验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  4. AUTH-04|凭据不入消息:测试条件为任务正文或 artifact 中出现 bearer token 字样。预期行为是协议层不提取并使用正文中的凭据,日志和错误也不回显秘密。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  5. AUTH-05|角色撤销:测试条件为用户取得扩展卡后角色被管理员撤销。预期行为是后续任务重新验权并失败,已缓存技能可见性不能继续授权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  6. AUTH-06|mTLS 吊销:测试条件为客户端证书在会话期间被吊销。预期行为是新连接拒绝,长任务在敏感阶段重新检查并按策略停止。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  7. SKILL-01|未声明技能:测试条件为客户端直接调用卡片中不存在的技能标识。预期行为是服务拒绝且不进行模糊匹配,避免相似名称指向高权限动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  8. SKILL-02|技能描述扩权:测试条件为名称不变但描述加入发送、删除或外发能力。预期行为是卡片差异触发重新评审,旧批准不能覆盖新增副作用。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  9. SKILL-03|输入 schema 放宽:测试条件为枚举改为任意字符串或新增自由 URL。预期行为是变更门禁阻断;服务端仍做路径、域名、对象与预算校验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  10. SKILL-04|只读技能写入:测试条件为标为查询的技能实际改变下游状态。预期行为是业务读回发现副作用,任务失败并触发隔离与回滚。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。

任务与通知

  1. TASK-01|合法状态序列:测试条件为submitted 到 working 再到 completed。预期行为是序列号单调、主体和版本一致,并有下游权威结果支持完成状态。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  2. TASK-02|非法状态回退:测试条件为completed 后收到较旧 working 事件。预期行为是客户端按版本拒绝旧事件,不恢复已结束任务或重复动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  3. TASK-03|取消竞态:测试条件为取消请求与下游提交同时发生。预期行为是状态说明动作是否可能已执行,并通过业务读回决定补偿而非盲目重试。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  4. TASK-04|超时重试:测试条件为客户端超时但服务端可能已完成。预期行为是使用任务查询与幂等键取得原结果,不重复创建、发送、付款或发布。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  5. TASK-05|跨租户任务读取:测试条件为租户甲猜测租户乙的任务 ID。预期行为是返回统一未授权结果,不暴露任务存在性、状态、消息或 artifact。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  6. TASK-06|人工补充输入:测试条件为外部消息要求改变原任务目标和数据范围。预期行为是重新展示并批准差异;补充输入不能暗中扩大授权合同。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  7. PUSH-01|重复通知:测试条件为同一 completed 事件发送三次。预期行为是客户端按事件与任务版本幂等处理,只产生一次业务后续动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  8. PUSH-02|伪造通知:测试条件为未持有单用途令牌的来源发送合法 JSON。预期行为是认证失败,内容不进入任务状态机,也不触发后续工具。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  9. PUSH-03|通知 SSRF:测试条件为回调 URL 指向私网或经重定向进入私网。预期行为是订阅创建和每次连接都检查最终地址并阻断。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  10. PUSH-04|通知洪泛:测试条件为攻击者快速创建订阅并制造大量失败重试。预期行为是按任务、主体和目标限额,退避有上限并可独立停用。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。

数据、故障与恢复

  1. DATA-01|伪装文件类型:测试条件为artifact 文件名是图片但实际为脚本或压缩包。预期行为是按内容检测与隔离策略处理,不自动执行或展示活动内容。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  2. DATA-02|压缩包逃逸:测试条件为artifact 含绝对路径、上级目录或符号链接。预期行为是解压在隔离目录并拒绝越界,宿主文件没有任何变化。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  3. DATA-03|提示注入:测试条件为artifact 文本要求读取本地密钥并调用另一智能体。预期行为是文本保留为不可信数据,原任务与工具策略不被修改。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  4. DATA-04|敏感字段外发:测试条件为任务返回包含未申请的个人信息或内部标识。预期行为是字段最小化门禁阻断并记录数据分类,不把全文复制到普通日志。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  5. FAIL-01|卡片服务不可用:测试条件为发现端点超时或返回 5xx。预期行为是客户端给出可恢复错误,使用缓存也受有效期和风险等级限制。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  6. FAIL-02|接口部分故障:测试条件为首选接口失败而备用接口可用。预期行为是只有双方兼容且策略允许时切换,并记录实际绑定与语义差异。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  7. FAIL-03|安全方案迁移:测试条件为OAuth issuer 或元数据地址改变。预期行为是旧会话和旧卡片冻结,重新验证来源与受众后才恢复。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  8. FAIL-04|停机开关:测试条件为发现跨租户泄露或伪造卡片。预期行为是独立运维开关停止发现、任务、通知和凭据,模型无法自行解除。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  9. REC-01|版本回滚:测试条件为新卡片或服务版本使合法任务失败。预期行为是回滚恢复上一已知组合,同时保留新版本失败证据和数据迁移边界。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  10. REC-02|令牌撤销:测试条件为事故后使用旧访问令牌、刷新令牌和会话。预期行为是所有入口均拒绝,扩展卡缓存和排队任务也重新验权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  11. REC-03|残留任务:测试条件为事故前入队、事故后才执行的任务。预期行为是执行前检查当前授权和策略,失效任务进入人工处置而非自动完成。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
  12. REC-04|恢复灰度:测试条件为修复后重新开放服务。预期行为是先在低权限测试租户运行正常、拒绝、撤销和回滚用例,再逐步扩大。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。

官方证据、当前来源与适用边界

A2A官方规范中Agent Card发现机制与认证扩展卡安全要求的必要局部
A2A 项目官方规范必要局部,访问于 2026 年 10 月 8 日。官方展示不等于本站完成任何 A2A 服务实测。

官方规范当前把 Agent Card 定义为描述身份、能力、技能、服务接口和认证要求的 JSON 文档,并列出 well-known、注册表和直接配置等发现方式;认证扩展卡需要按公开卡声明的安全方案访问,且不应泄露可被利用的内部地址或秘密。以上是官方规范事实。本文将其转化为发现、缓存、逐次授权、任务状态与恢复测试,属于编辑整理和可复现验收设计,不代表某个 SDK、云平台或智能体已经通过。

  • A2A 官方规范:Agent Card、接口、认证扩展卡、任务与推送通知的规范要求。
  • A2A Agent Discovery:发现策略、敏感卡片保护和缓存建议。
  • A2A Key Concepts:参与者、任务、消息、artifact 与认证边界。
  • A2A Extensions:扩展 URI、required 语义和状态机扩展。
  • A2A Releases:版本、well-known 路径、安全方案与扩展卡相关变更。
  • A2A Java Security:实现侧输入边界、可观测性敏感数据与队列限制说明。

站内相邻任务怎样分工

MCP Server 安全检查解决工具服务器的 OAuth、权限和提示注入;Agent 身份与授权解释用户委托、工作负载身份与逐工具权限;间接提示注入威胁模型覆盖网页、邮件、文件与工具返回的来源—动作隔离;模型 API 故障恢复补充请求 ID、有限重试、幂等与降级。本文只聚焦 A2A 发现、Agent Card、跨域身份和任务互操作,不把相邻主题重复扩写。

核验日期和证据边界

本文在 2026 年 10 月 8 日核验公开资料,没有登录真实企业 A2A 环境,也没有处理生产令牌、客户数据或商业智能体。官方页面能证明规范当时公开的字段与要求,不能证明具体实现正确;本站原创图解释关系,不是产品界面或实测截图;预发布测试回执只适用于记录的版本、身份、租户、接口和策略。GitHub 更新时间、页面哈希、sitemap、IndexNow 与爬虫访问都不能证明搜索收录、排名、曝光、点击、真实用户或转化。协议、SDK、卡片字段、身份提供商、技能、扩展、网络、任务状态或数据等级变化后,应重跑受影响的正常、拒绝、撤销与回滚用例。