代理身份(Agent_ID)

每个代理必须(MUST)拥有唯一且可验证的身份。 格式:基于 URI 的标识符,遵循以下模式:
https://<agent-domain>/.well-known/agent.json
示例
https://travel-agent.example.com/.well-known/agent.json
https://coding-assistant.example.com/.well-known/agent.json

代理身份文档

代理必须(MUST)在其 agent_id URI 上发布一个 JSON 文档:
{
  "ath_version": "0.1",
  "agent_id": "https://travel-agent.example.com/.well-known/agent.json",
  "name": "TravelBot",
  "developer": {
    "name": "Example Corp",
    "id": "dev-example-12345",
    "contact": "security@example.com"
  },
  "capabilities": ["flight-search", "hotel-booking", "itinerary-planning"],
  "public_key": "<JWK or PEM for agent attestation verification>"
}

必填字段

字段类型描述
ath_versionstring协议版本(例如 "0.1"
agent_idstring该代理的规范 URI
namestring人类可读的代理名称
developerobject开发者信息
developer.namestring开发者或组织名称
developer.idstring开发者标识符
public_keystring/object用于证明验证的 JWK 或 PEM

可选字段

字段类型描述
developer.contactstring安全联系邮箱
capabilitiesstring[]代理能力列表

服务身份(App_ID)

服务通过其现有标识符进行识别:
  • 客户端应用:包名(例如 com.example.mail
  • 服务端服务:URI(例如 https://api.example.com

代理证明

代理使用签名的 JWT(代理证明令牌)来证明其身份。

JWT 头部

{
  "alg": "ES256",
  "typ": "JWT",
  "kid": "<key-id>"
}

JWT 载荷

{
  "iss": "https://travel-agent.example.com",
  "sub": "<agent_id>",
  "aud": "<target-service-or-gateway>",
  "iat": 1720000000,
  "exp": 1720003600,
  "jti": "<unique-token-id>",
  "capabilities": ["flight-search"]
}

必需声明

声明描述
iss签发者 — 代理的域名
sub主体 — 完整的 agent_id URI
aud受众 — 目标服务或网关 URL
iat签发时间 — 时间戳。实现者必须(MUST)验证 iat 在当前时间 5 分钟以内
exp过期时间 — 必须(MUST)存在
jtiJWT ID — 每个证明必须(MUST)唯一。实现者必须(MUST)维护已见 jti 值的重放缓存(保留至 exp),并拒绝重复值

验证

验证方(网关或服务):
  1. agent_id URI 获取代理的身份文档
  2. 提取公钥
  3. 使用公钥验证 JWT 签名
  4. 验证 exp(未过期)和 aud(与验证方的 URL 匹配)
  5. 验证 jti 此前未被使用过(针对重放缓存检查)
  6. 验证 iat 在当前时间 5 分钟以内
  7. 实现者必须(MUST)拒绝已过期、受众不匹配或 jti 重复的证明

身份文档缓存

  • 实现者可以(MAY)缓存代理身份文档以减少获取开销
  • 缓存的最大生存时间禁止(MUST NOT)超过 5 分钟
  • 代理身份文档建议(SHOULD)包含 Cache-Control: max-age=300 响应头
  • 当证明验证因签名不匹配(而非过期或受众错误)而失败时,实现者建议(SHOULD)重新获取身份文档(绕过缓存),以支持紧急密钥轮换。为防止被利用为 DoS 放大器,实现者必须(MUST)将重新获取频率限制为每个 agent_id 每分钟最多一次
  • 实现者建议(SHOULD)对获取代理身份文档设置连接和读取超时