跳到主要内容

上游认证

每个已注册的 A2A Agent 都会保存 AISIX 用来认证到该上游 Agent 的凭证。AISIX 在网关侧持有该凭证,并在转发调用时向上游出示。A2A 客户端发送给 AISIX 的调用方 API Key 只用于认证调用方到 AISIX,不会被转发或暴露给上游 Agent。

注册或更新 Agent 时,通过 auth_type 字段及其配套字段设置上游凭证。AISIX 会把同一凭证用于它对上游执行的两类操作:获取 Agent card,以及转发 JSON-RPC 调用。

auth_type上游凭证AISIX 如何发送
none不发送凭证。
bearersecret(Bearer Token)Authorization: Bearer <secret>
api_keysecret(API Key)x-api-key: <secret>
oauth2client_id + token_url + secret资源中可接受,但运行时尚不可用;见下文

secret 保存 AISIX 需要向上游出示的明文凭证。该凭证只在网关侧使用,不会发送给调用方客户端。要轮换凭证,请使用新的 secret 更新资源。

无认证

当上游 Agent 不需要凭证时使用 none,例如该 Agent 只在可信内部网络中可访问。

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/a2a_agents" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "invoice-processor",
"url": "https://agents.internal/invoice",
"protocol_version": "0.3",
"auth_type": "none"
}'

auth_type 默认为 none,因此也可以省略。none Agent 不应设置 secretclient_idtoken_urlscopes

Bearer Token

当上游 Agent 期望在 Authorization 请求头中收到静态 Token 时,使用 bearer,并把 Token 写入 secret

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/a2a_agents" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "research-assistant",
"url": "https://agents.example.com/a2a",
"protocol_version": "0.3",
"auth_type": "bearer",
"secret": "YOUR_UPSTREAM_TOKEN"
}'

AISIX 会在每个发往该上游的请求中发送 Authorization: Bearer YOUR_UPSTREAM_TOKENsecret 必填且不能为空。

API Key

当上游 Agent 期望在 x-api-key 请求头中收到 Key 时,使用 api_key,并把 Key 写入 secret

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/a2a_agents" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "translator",
"url": "https://agents.example.com/translate",
"protocol_version": "0.3",
"auth_type": "api_key",
"secret": "YOUR_UPSTREAM_API_KEY"
}'

AISIX 会在每个发往该上游的请求中发送 x-api-key: YOUR_UPSTREAM_API_KEYsecret 必填且不能为空。

OAuth 2.0 Client Credentials 尚不可用

Agent 资源中可以接受 oauth2 认证类型,以便向前兼容,但数据面运行时尚不会获取 Token。你可以创建 oauth2 Agent,并提供 client_idtoken_url 和写入 secret 的 OAuth client secret;但调用该 Agent 会返回 HTTP 501,其 Agent card 也不会被提供。

# 写入时可以接受,但在运行时支持 OAuth 2.0 client credentials grant 之前,
# 调用该 Agent 会返回 501。
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/a2a_agents" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "orders",
"url": "https://agents.example.com/orders",
"auth_type": "oauth2",
"client_id": "aisix-gateway",
"token_url": "https://auth.example.com/oauth/token",
"secret": "YOUR_OAUTH_CLIENT_SECRET",
"scopes": ["a2a.invoke"]
}'

在运行时支持该能力前,请为需要认证的 Agent 使用 bearerapi_key

校验规则

AISIX 会在创建或更新 Agent 时根据 auth_type 校验凭证字段:

  • none:不要设置 secretclient_idtoken_urlscopes
  • bearer / api_keysecret 必填且不能为空。
  • oauth2client_idtoken_urlsecret 都必填且不能为空;scopes 可选。资源可以写入,但调用会返回 501,见上文。

不满足规则的 Agent 会在写入时以 HTTP 400 拒绝。包含 /display_name 也会被拒绝,因为它会作为 Agent URL 的路径片段。重复的 display_name 会以 409 拒绝。

如果凭证后续失效(例如被轮换或吊销),该 Agent 的调用会失败,但其它已注册 Agent 不受影响。该失败会被记录为 bad-gateway(502)上游错误,凭证细节不会暴露给调用方客户端。

凭证隔离

上游凭证不会跨到调用方客户端:

  • 客户端只出示自己的 AISIX 调用方 API Key。AISIX 用它认证调用方,并使用该 Agent 自己配置的凭证向上游转发请求。
  • 当上游失败时,AISIX 返回 HTTP 502;上游状态只会出现在 JSON-RPC 错误信息中,上游响应体不会被透传回来。
  • AISIX 提供的 Agent card 会保留上游 Agent 声明的元数据,但会把服务 url 重写为网关地址;其中不包含上游凭证。

下一步