- JSON Schema(JSON Schema 2020-12)— 用于 SDK 代码生成和验证
- OpenAPI 3.1 YAML — 用于 API 文档和测试
发现
DiscoveryDocument
由GET /.well-known/ath.json 返回。
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
ath_version | string | 是 | 协议版本 |
gateway_id | string | 是 | 网关标识符 |
agent_registration_endpoint | string (URI) | 是 | 代理注册 URL |
supported_providers | ProviderInfo[] | 是 | 可用的服务提供方 |
ProviderInfo
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
provider_id | string | 是 | 唯一的服务提供方标识符 |
display_name | string | 是 | 人类可读的名称 |
categories | string[] | 否 | 服务提供方分类 |
available_scopes | string[] | 是 | 可请求的范围 |
auth_mode | string | 是 | 认证模式(例如 "OAUTH2") |
agent_approval_required | boolean | 是 | 是否需要注册 |
注册
AgentRegistrationRequest
发送至POST /ath/agents/register。
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
agent_id | string (URI) | 是 | 代理的规范 URI |
agent_attestation | string (JWT) | 是 | 签名的证明令牌 |
developer.name | string | 是 | 开发者名称 |
developer.id | string | 是 | 开发者标识符 |
requested_providers | array | 是 | 请求的服务提供方和范围 |
purpose | string | 否 | 人类可读的用途说明 |
redirect_uris | string[] | 否 | OAuth 回调 URI。如果提供,授权时通过精确匹配验证。如果省略,user_redirect_uri 必须(MUST)被拒绝 |
AgentRegistrationResponse
| 字段 | 类型 | 描述 |
|---|---|---|
client_id | string | 唯一的注册标识符 |
client_secret | string | 令牌交换的密钥 |
agent_status | "approved" | "pending" | "denied" | 注册状态 |
approved_providers | ProviderApproval[] | 各服务提供方的审批结果 |
approval_expires | string (ISO 8601) | 过期时间戳 |
ProviderApproval
授权
AuthorizationRequest
发送至POST /ath/authorize。
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
client_id | string | 是 | 代理的客户端 ID |
agent_attestation | string (JWT) | 是 | 新鲜的证明令牌 |
provider_id | string | 是 | 要授权的服务提供方 |
scopes | string[] | 是 | 要请求的范围(需在已批准范围内) |
user_redirect_uri | string (URI) | 否 | 授权同意后的重定向地址 |
state | string | 是 | CSRF 保护状态值(必须(MUST)使用 CSPRNG 生成,至少 128 位熵) |
resource | string (URI) | 否 | 目标资源服务器(RFC 8707) |
AuthorizationResponse
| 字段 | 类型 | 描述 |
|---|---|---|
authorization_url | string (URI) | 包含 PKCE 参数的 OAuth 授权同意 URL |
ath_session_id | string | 用于令牌交换的会话 ID |
令牌
TokenExchangeRequest
发送至POST /ath/token。需要 client_secret 和新鲜的 agent_attestation 以证明持有代理私钥。
TokenResponse
ScopeIntersection
| 字段 | 类型 | 描述 |
|---|---|---|
agent_approved | string[] | 服务为该代理批准的范围 |
user_consented | string[] | 用户同意的范围 |
effective | string[] | 交集(有效权限) |
吊销
TokenRevocationRequest
发送至POST /ath/revoke。需要客户端认证,按照 RFC 7009。
错误
ATHError
所有错误响应遵循以下结构:| 错误码 | HTTP 状态码 | 描述 |
|---|---|---|
INVALID_ATTESTATION | 401 | 代理证明 JWT 验证失败 |
AGENT_NOT_REGISTERED | 403 | 代理必须先注册才能授权 |
AGENT_UNAPPROVED | 403 | 代理注册被拒绝 |
PROVIDER_NOT_APPROVED | 403 | 代理未获得该服务提供方的批准 |
SCOPE_NOT_APPROVED | 403 | 代理未获得所请求范围的批准 |
SESSION_NOT_FOUND | 400 | 未找到 OAuth 会话 |
SESSION_EXPIRED | 400 | OAuth 会话已过期 |
STATE_MISMATCH | 400 | OAuth state 参数不匹配 |
TOKEN_INVALID | 401 | ATH 访问令牌无效 |
TOKEN_EXPIRED | 401 | ATH 访问令牌已过期 |
TOKEN_REVOKED | 401 | ATH 访问令牌已被吊销 |
AGENT_IDENTITY_MISMATCH | 403 | 请求中的代理 ID 与令牌绑定不匹配 |
PROVIDER_MISMATCH | 403 | 请求中的服务提供方与令牌绑定不匹配 |
USER_DENIED | 403 | 用户拒绝了 OAuth 授权同意 |
OAUTH_ERROR | 502 | 上游 OAuth 提供方返回错误 |
INTERNAL_ERROR | 500 | 内部服务器错误 |