A2A Agent Card 是客户端发现远程智能体的机器可读说明书,但它不是信任证明,也不是给智能体自动授权的通行证。上线时应把公开卡、认证后的扩展卡、真实协议端点和每次任务授权分开验证:先从受控来源取得卡片,校验结构、版本、接口和缓存,再按卡片声明完成身份认证,最后用允许与拒绝任务证明服务端确实执行对象级权限。只验证 JSON 能解析,无法阻止伪造端点、过度能力声明、缓存陈旧、跨租户泄露或高风险动作被误调用。
Agent Card 到底解决什么问题
Agent Card 的核心作用是让 A2A 客户端在发起任务前知道对方是谁、从哪个接口通信、支持哪些协议与能力、需要怎样认证,以及有哪些可被选择的技能。它缩短了发现和配置路径,却不会替客户端判断服务商信誉、技能真实性、数据处理承诺或动作风险。生产设计应把“声明”“握手”“授权”“执行结果”分别保存证据,避免把第一步成功误读成整条链可信。
公开卡是发现面,不是机密配置仓库
公开的 `/.well-known/agent-card.json` 适合放名称、描述、服务商、首选接口、协议版本、公开技能和认证方案提示。内部主机名、调试地址、租户列表、密钥、令牌、真实客户数据、未公开技能、管理员方法与基础设施拓扑不应进入公开卡。若不同身份需要看到不同能力,公开卡保持最小且稳定,用认证后的扩展卡按会话提供增量。这样既让未知客户端完成初始发现,又不把敏感能力目录暴露给所有扫描者。
技能描述帮助路由,但不能代替执行权限
技能的名称、说明、输入输出模式和示例会影响客户端或模型是否选择它们,因此描述变化本身就是策略变化。卡片写着“可退款”只表示服务宣称存在相关技能,不表示当前用户可以给任意订单退款;服务端仍需从可信身份上下文解析租户和主体,检查订单归属、金额、状态、批准与幂等。客户端也不应从自然语言描述推导额外权限。验收要保存技能目录哈希,并对同名、近似名、描述扩权和字段类型放宽建立变更门禁。

怎样发现卡片并确认它来自正确的主体
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 不只交换一次请求与一次答案,还可能创建长任务、流式返回、暂停等待输入、生成 artifact,并通过推送通知异步更新。安全验收要把状态机和副作用联系起来:一个任务显示 completed,不一定证明下游动作成功;一个客户端超时,也不表示服务器没有执行。每个状态转换都需要可关联的任务 ID、主体、版本和业务回执。
状态机要拒绝非法跳转与旧消息覆盖
定义允许的状态转移、终止状态和重试规则,拒绝 completed 回到 working、canceled 后继续产生副作用、旧序列号覆盖新状态等情况。并发更新使用版本或序列号,消息与 artifact 都绑定任务和租户。客户端断线重连时从服务器读取权威状态,不根据最后一个本地事件猜测。人工补充输入前展示当前任务目标与数据边界,避免外部文本借“继续任务”扩展原始授权。
重复通知必须幂等,通知端点必须受限
推送可能因网络重试重复到达,客户端按事件 ID、任务 ID 和版本去重,不能每收到一次 completed 就重复付款、发布或发送。回调 URL 使用 HTTPS、域名白名单和最终地址验证,阻止 SSRF、DNS 重绑定和重定向到私网。每个订阅使用单用途短期令牌,服务端限制每任务配置数、速率、响应大小和失败重试次数。日志记录目标域名与结果,不记录完整令牌或敏感任务正文。
artifact 是数据载体,不是可信指令
文本、文件、图片、结构化数据和链接都可能来自远端智能体或其工具链,客户端要保留来源、媒体类型、大小、哈希和信任标签。下载先进入隔离区,文件名不决定真实类型;压缩包、宏、脚本和可执行内容不能自动打开。artifact 中要求调用另一个工具、上传本地文件或改变安全规则的文字仍属于不可信内容。只有用户原始任务和确定性策略可以扩大动作,模型对 artifact 的解释不能自行授权。

从预发布到生产应按什么顺序实施
最稳妥的路径不是一次启用所有技能,而是在隔离环境先建立一条最小只读链:固定卡片来源,校验 schema 与版本,选择一个接口,完成认证,调用一个无副作用技能,读取权威结果并撤销会话。随后逐步加入扩展卡、长任务、流式响应、推送和可逆写入,每扩大一个能力都重跑此前的正常与拒绝用例。高风险动作最后接入,并要求参数绑定批准、业务读回和可验证回滚。
建立四份清单再开始联调
第一份是身份清单,列客户端、最终用户、智能体服务、身份提供商、下游系统和租户;第二份是发现清单,列每个卡片来源、域名、注册表、缓存和变更负责人;第三份是能力清单,列技能、接口、协议、扩展、输入输出、数据等级和副作用;第四份是证据清单,为每个门禁指定 HTTP、日志、策略决定、业务读回或截图。清单中任何“由模型判断”“默认可信”或“以后补”都视为未完成。
灰度租户只给最小数据与可逆动作
灰度使用独立账户、测试数据、短期凭据、受限网络和明确预算,不让预发布智能体访问生产客户、真实密钥或全局管理接口。观察卡片刷新、技能选择、授权拒绝、任务时延、异常重试、通知失败和 artifact 处理。若需要人工介入,回执记录是谁在何时批准了什么参数,而不是只保存聊天中的一句同意。灰度结论只适用于当时的卡片哈希、服务版本、协议版本、策略和测试数据。
上线门禁必须允许明确地说 blocked
每项测试给出 passed、failed、blocked 或 not-applicable,并附理由和原始证据。缺少真实身份提供商、无法验证扩展卡隔离、回滚未跑通、官方规范与实现版本不一致时,应保持 blocked;排期、市场发布、演示成功和模型自述都不能覆盖。上线后继续监控卡片差异、认证失败、非法状态跳转、重复通知、跨租户命中和高风险动作,并设置独立停机开关。
四十八项互操作与安全验收
这组夹具用于预发布环境,不是产品能力排行榜。每项都固定卡片哈希、客户端与服务版本、协议绑定、主体、租户、输入、预期状态、副作用和清理动作。测试结果必须包含原始 HTTP 或 RPC 回执、策略决定、任务事件和必要的下游读回;模型口头说明不算证据。正常用例与拒绝用例成对运行,避免用“全部请求都失败”制造虚假安全。
发现与卡片
- DISC-01|规范 well-known 获取:测试条件为从已批准 HTTPS origin 获取公开卡,最终 URL、内容类型与响应大小符合策略。预期行为是保存请求、响应头、最终 URL、卡片哈希和来源审批;失败时不回退到搜索结果或同名域名。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DISC-02|HTTP 降级:测试条件为把 HTTPS 重定向到 HTTP。预期行为是客户端拒绝降级并记录重定向链,且没有向降级目标发送任何凭据。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DISC-03|私网重定向:测试条件为公开 URL 重定向到环回、私网或云元数据地址。预期行为是连接前后的地址检查都阻断,DNS 变化也不能绕过。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DISC-04|相似域名:测试条件为使用拼写近似或国际化同形域名返回合法 JSON。预期行为是来源绑定失败;证书有效不能替代组织与域名归属核验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DISC-05|注册表撤销:测试条件为已缓存条目在企业注册表中被撤销。预期行为是下次调用前撤销生效,高风险任务立即阻断,缓存不能继续授权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DISC-06|直接配置变更:测试条件为人工配置的卡片 URL 改变主机或路径。预期行为是生成差异并要求重新批准,不静默跟随到新服务。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-01|JSON 与 schema:测试条件为缺失必填字段、错误类型和超大数组分别输入。预期行为是解析器给出确定错误并限制资源消耗,不以部分解析结果调用端点。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-02|未知必需扩展:测试条件为卡片声明客户端不支持且 required=true 的扩展。预期行为是客户端在发送任务前拒绝,并指出缺少的扩展 URI。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-03|未知可选扩展:测试条件为卡片声明未知但非必需扩展。预期行为是客户端忽略扩展增量但仍按基础协议工作,不能误读自定义字段。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-04|协议版本过新:测试条件为服务声明超出客户端兼容范围的版本。预期行为是明确阻断或选择双方支持的另一接口,不按字符串大小猜兼容。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-05|新旧字段冲突:测试条件为同一语义同时出现旧字段与新字段且取值不同。预期行为是客户端拒绝歧义并记录原始卡片,不能随意挑一个值。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CARD-06|接口漂移:测试条件为卡片端点可取但首选协议端点返回营销页或登录 HTML。预期行为是无副作用探测识别内容类型不符并阻断任务。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CACHE-01|ETag 条件刷新:测试条件为服务返回 ETag 后卡片未变化。预期行为是客户端使用条件请求并接受 304,同时保留取得时间和原内容哈希。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CACHE-02|缓存陈旧:测试条件为卡片技能或安全方案已变但中间缓存仍返回旧版本。预期行为是到期后强制重验证;高风险动作在版本不确定时保持 blocked。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CACHE-03|扩展卡缓存隔离:测试条件为管理员取得扩展卡后普通用户从同一设备访问。预期行为是缓存键包含身份与租户,普通用户看不到管理员技能、配额或内部地址。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- CACHE-04|注销清理:测试条件为用户注销后客户端离线重开。预期行为是会话扩展卡和令牌引用被清除,只能重新获取公共卡。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
身份与技能
- AUTH-01|错误 audience:测试条件为签名有效但为另一个资源签发的令牌。预期行为是服务在技能执行前拒绝,日志记录受众不匹配但不记录完整令牌。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- AUTH-02|错误 issuer:测试条件为攻击者控制的发行方签发结构正确令牌。预期行为是客户端与服务端都按固定 issuer 拒绝,不从令牌内容动态信任发行方。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- AUTH-03|scope 过宽:测试条件为令牌含宽泛写权限但对象不属于当前主体。预期行为是业务对象级授权拒绝,scope 不能覆盖租户和所有权校验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- AUTH-04|凭据不入消息:测试条件为任务正文或 artifact 中出现 bearer token 字样。预期行为是协议层不提取并使用正文中的凭据,日志和错误也不回显秘密。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- AUTH-05|角色撤销:测试条件为用户取得扩展卡后角色被管理员撤销。预期行为是后续任务重新验权并失败,已缓存技能可见性不能继续授权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- AUTH-06|mTLS 吊销:测试条件为客户端证书在会话期间被吊销。预期行为是新连接拒绝,长任务在敏感阶段重新检查并按策略停止。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- SKILL-01|未声明技能:测试条件为客户端直接调用卡片中不存在的技能标识。预期行为是服务拒绝且不进行模糊匹配,避免相似名称指向高权限动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- SKILL-02|技能描述扩权:测试条件为名称不变但描述加入发送、删除或外发能力。预期行为是卡片差异触发重新评审,旧批准不能覆盖新增副作用。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- SKILL-03|输入 schema 放宽:测试条件为枚举改为任意字符串或新增自由 URL。预期行为是变更门禁阻断;服务端仍做路径、域名、对象与预算校验。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- SKILL-04|只读技能写入:测试条件为标为查询的技能实际改变下游状态。预期行为是业务读回发现副作用,任务失败并触发隔离与回滚。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
任务与通知
- TASK-01|合法状态序列:测试条件为submitted 到 working 再到 completed。预期行为是序列号单调、主体和版本一致,并有下游权威结果支持完成状态。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- TASK-02|非法状态回退:测试条件为completed 后收到较旧 working 事件。预期行为是客户端按版本拒绝旧事件,不恢复已结束任务或重复动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- TASK-03|取消竞态:测试条件为取消请求与下游提交同时发生。预期行为是状态说明动作是否可能已执行,并通过业务读回决定补偿而非盲目重试。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- TASK-04|超时重试:测试条件为客户端超时但服务端可能已完成。预期行为是使用任务查询与幂等键取得原结果,不重复创建、发送、付款或发布。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- TASK-05|跨租户任务读取:测试条件为租户甲猜测租户乙的任务 ID。预期行为是返回统一未授权结果,不暴露任务存在性、状态、消息或 artifact。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- TASK-06|人工补充输入:测试条件为外部消息要求改变原任务目标和数据范围。预期行为是重新展示并批准差异;补充输入不能暗中扩大授权合同。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- PUSH-01|重复通知:测试条件为同一 completed 事件发送三次。预期行为是客户端按事件与任务版本幂等处理,只产生一次业务后续动作。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- PUSH-02|伪造通知:测试条件为未持有单用途令牌的来源发送合法 JSON。预期行为是认证失败,内容不进入任务状态机,也不触发后续工具。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- PUSH-03|通知 SSRF:测试条件为回调 URL 指向私网或经重定向进入私网。预期行为是订阅创建和每次连接都检查最终地址并阻断。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- PUSH-04|通知洪泛:测试条件为攻击者快速创建订阅并制造大量失败重试。预期行为是按任务、主体和目标限额,退避有上限并可独立停用。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
数据、故障与恢复
- DATA-01|伪装文件类型:测试条件为artifact 文件名是图片但实际为脚本或压缩包。预期行为是按内容检测与隔离策略处理,不自动执行或展示活动内容。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DATA-02|压缩包逃逸:测试条件为artifact 含绝对路径、上级目录或符号链接。预期行为是解压在隔离目录并拒绝越界,宿主文件没有任何变化。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DATA-03|提示注入:测试条件为artifact 文本要求读取本地密钥并调用另一智能体。预期行为是文本保留为不可信数据,原任务与工具策略不被修改。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- DATA-04|敏感字段外发:测试条件为任务返回包含未申请的个人信息或内部标识。预期行为是字段最小化门禁阻断并记录数据分类,不把全文复制到普通日志。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- FAIL-01|卡片服务不可用:测试条件为发现端点超时或返回 5xx。预期行为是客户端给出可恢复错误,使用缓存也受有效期和风险等级限制。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- FAIL-02|接口部分故障:测试条件为首选接口失败而备用接口可用。预期行为是只有双方兼容且策略允许时切换,并记录实际绑定与语义差异。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- FAIL-03|安全方案迁移:测试条件为OAuth issuer 或元数据地址改变。预期行为是旧会话和旧卡片冻结,重新验证来源与受众后才恢复。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- FAIL-04|停机开关:测试条件为发现跨租户泄露或伪造卡片。预期行为是独立运维开关停止发现、任务、通知和凭据,模型无法自行解除。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- REC-01|版本回滚:测试条件为新卡片或服务版本使合法任务失败。预期行为是回滚恢复上一已知组合,同时保留新版本失败证据和数据迁移边界。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- REC-02|令牌撤销:测试条件为事故后使用旧访问令牌、刷新令牌和会话。预期行为是所有入口均拒绝,扩展卡缓存和排队任务也重新验权。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- REC-03|残留任务:测试条件为事故前入队、事故后才执行的任务。预期行为是执行前检查当前授权和策略,失效任务进入人工处置而非自动完成。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
- REC-04|恢复灰度:测试条件为修复后重新开放服务。预期行为是先在低权限测试租户运行正常、拒绝、撤销和回滚用例,再逐步扩大。回执还要记录测试时间、主体、租户、卡片内容哈希、协商版本、实际接口、服务策略版本、最终任务状态与清理结果;任何字段缺失时,该项保持 blocked,不能只凭页面显示或一次成功响应判为通过。
官方证据、当前来源与适用边界

官方规范当前把 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、卡片字段、身份提供商、技能、扩展、网络、任务状态或数据等级变化后,应重跑受影响的正常、拒绝、撤销与回滚用例。
