Corti A2A:逐binding验能力,跨agent转发凭据另验信任
Corti A2A:逐binding验能力,跨agent转发凭据另验信任
核心判断与知识轴
A2A / MCP Gateway / harness-runtime / sandbox-security。 这是一个具有tenant鉴权、Agent Card、双binding、connector registry、任务/stream与trace入口的官方实现文档案例,不是又一篇协议入门。其耐久启发是:支持同一协议不代表每种binding交付相同的成本/状态证据;统一connector模型也不代表所有connector共享安全的凭据语义。
对Hermes的远程委托而言,A2A-Agent2Agent-Protocol应按“发现→选择binding→认证→执行→终态/成本”验收;MCP-Gateway-Runtime应另外约束凭据向哪个下游传播。只存supports_a2a=true或一张Card会漏掉这些差异。
证据范围与日期
2026-09-23读取官方Card、protocol、connectors、migration、connector-auth指南,以及Card GET/Cancel Task两个端点的完整Markdown/OpenAPI快照。未取得可信发布日期,不称今日release。原始.yml地址返回欢迎页;已拒绝把HTTP200当schema成功,改用官方端点.md视图。
Card是文档示例,不是本机获取的真实租户Card。 已解析两份YAML并检查安全声明、binding、状态、usage与示例冲突;没有账号/tenant凭据,也没有创建agent、运行远端任务、SSE/push或生产trace。contested: true仅标记下面的文档矛盾与未决语义,不声称线上漏洞。
机制一:发现本身是受保护的租户操作
官方路径是GET /v2/agentic/agents/{agentId}/.well-known/agent-card.json。Card与其他v2请求一样要求Bearer和Tenant-Name;OpenAPI中两个scheme在同一security requirement对象里,表示同时要求,不是任选其一。Card可读也仍不证明跨tenant任务授权。^[raw/articles/corti-a2a-binding-and-credential-contracts-2026-09-23.md]
示例Card的version=0.1.0与各interface的protocolVersion=1.0分别记录服务/Card版本和协议版本。两个interface为JSONRPC、HTTP+JSON,base URL相同;不能由URL相同推导payload、错误或计量等价。streaming=true、pushNotifications=false只是示例值;文档明确push管理端点仍是future scope,不能把schema含push字段当push已上线。^[raw/articles/corti-a2a-binding-and-credential-contracts-2026-09-23.md]
这和foundry-apim-a2a-discovery-and-credential-hops互补:discovery凭据与invocation凭据必须逐跳确认;不能为了方便探测Card而将正式token发给未经审核的远端URL。
机制二:connector统一形状,不统一身份传播
官方区分agent(同tenant Corti agent)与a2a(外部远程agent),MCP则是另一connector类型。文档说明只有MCP connector支持显式auth配置,A2A connector会自动转发caller的Bearer token。这是一条需要单独审查的凭据传播声明,不是标准A2A自动赋予的安全保证。^[raw/articles/corti-a2a-binding-and-credential-contracts-2026-09-23.md]
一阶问题是:入口token的issuer、audience、scope和可再委托范围是否适用于该远端?若remote origin任意、redirect后仍带token或不同服务共享过宽凭据,统一connector会扩大信任边界。本文没有源码/请求抓包证明这些情况实际存在;文档未展示目标allowlist、token exchange或受众绑定,不能据沉默判定已做或没做。
此外,registry config虽被接受,文档说尚不持久化、会被丢弃;connector子资源PATCH目前返回501,仅部分操作可用。schema有字段、创建请求被接受和运行配置实际生效,应当分开检查。不能用“CRUD已描述”推定更新/撤销已生效。
机制三:按binding验收计量和终态
| 维度 | 文档快照 | 接入时必须另验 |
| 消息调用 | JSONRPC方法名与HTTP+JSON路径各自映射 | 实际Card所宣告的binding和请求格式 |
| 流恢复 | 描述SSE及可选event id / Last-Event-ID | 断流后是否丢事件、重复effect、正确结束 |
| push | 管理端点尚未实现 | 不因schema字段而启用push依赖 |
| 任务usage | REST的metadata/$usage暂不返回,只有JSON-RPC填充 | 缺字段记unknown,不当零成本 |
| 取消 | 409表示已终态不可取消 | 取消后的任务状态与外部effect是否停止 |
上述均为文档契约,不是运行测量。usage示例中inputTokens=100、outputTokens=20、cachedInputTokens=64、totalTokens=120:cachedInput是input子集,不能再加一次;credits是另一个计费单位。成本字段缺失和成本为零必须区分。^[raw/articles/corti-a2a-binding-and-credential-contracts-2026-09-23.md]
明确保留的文档矛盾
- Cancel端点200描述为“The canceled task.”,同一响应示例却是
TASK_STATE_COMPLETED,并另有409不可取消终态。离线检查确实观察到冲突;不是取消执行成功的证明,也不足以定性线上取消有bug。 - Card指南称skill id为bare UUID,示例却是
con.前缀;不擅自去前缀“修正”原token,应保留原值并核真实schema/回包。 - Migration指南说v1 PATCH已为部分更新;端点OpenAPI概述却说v1 PATCH“effectively a PUT”。不能据此编造历史语义,当前v2的省略不变/null清除/数组整体替换单独记录。
- Connector auth指南将
none定义为无认证,但迁移表又把inherit映射到none并称自动转发caller token;不得只看模式名就断言不会外发凭据。^[raw/articles/corti-a2a-binding-and-credential-contracts-2026-09-23.md]
对Hermes / llm-wiki的可执行启发
- Registry分栏保存Card服务版本、protocol/binding、发现鉴权、调用鉴权、出站credential策略与已验证能力;不把示例升级为live receipt。
- 隔离环境对同一任务做REST/JSONRPC配对,核终态、artifact、usage、断流与重试;unknown成本不得进入“低成本高成功率”排行。
- 对远程A2A的token传播先做host/redirect/audience审计,再开放真实业务凭据;本文不建议用生产token去探测示例agent。
- wiki对规范正文、生成schema、示例、真实回包分别记来源;矛盾留显式待核,不由较新网页或更长schema自动裁决。
深度判断与未解问题
与microsoft-a2a-adapter-host-ownership和agentops-a2a-confirmation-principal-and-terminal-state的不同增量在于:可见的逐binding计量差异、connector功能尚未生效,以及显式caller-token forwarding声明。它们能直接变成接入负例和凭据合同,足以晋升;但不足以推荐生产接入、证明隔离/撤销或发布安全评级。
真实Card/task owner授权、跨IdP认证、取消对副作用的约束、trace完整性与凭据重定向规则均未验证。后续以Agent-Benchmarks中的独立状态验收补证,不把本轮YAML检查当企业部署E2E。
写入记录
- 2026-09-23 09:08 CST:新增Corti租户Card、逐binding计量与远端凭据传播机制;保留取消/ID/PATCH/auth文档矛盾,明确schema检查与真实委托实验边界。