上游身份认证
每个已注册的 Agent-to-Agent(A2A)Agent 都定义了 AISIX 是否以及如何向其上游进行身份认证。在获取 Agent Card 或转发 JSON-RPC 调用时,AISIX 会提供已配置的凭证(如有)。客户端使用调用方 API Key 向 AISIX 进行身份认证,默认情况下没有任何调用方请求头会到达该 Agent。需要看到某个请求头的 Agent(包括调用方自己的凭证),通过 forward_client_headers 显式开启。
这种分离方式让每个上游可以采用所需的身份认证方案,而调用方只需保留一个 AISIX 凭证。AISIX Cloud 和开源 AISIX 网关通过不同管理方式支持相同的模式。
前置条件
请完成 AISIX Cloud 或开源 AISIX 网关的配置 Agent 网关。如需执行可选的端到端验证,请保持同一个 Shell、网关、测试 Agent 和临时 Docker 网络运行。
身份认证模式
请选择与上游 Agent 要求相符的模式:
auth_type | 必填字段 | 上游请求头 |
|---|---|---|
none | 无 | 不发送凭证。 |
bearer | secret | Authorization: Bearer <secret> |
api_key | secret | x-api-key: <secret> |
auth_type 默认为 none。在此模式下,不要设置 secret。bearer 和 api_key 模式要求提供非空 secret。
使用凭证的上游应采用 HTTPS。如果为 http:// URL 配置了 Bearer Token 或 API Key,网关会记录警告,因为凭证将以明文通过网络传输。
配置上游身份认证
以下示例为配置指南中已注册的 echo-agent 添加 Bearer 身份认证。将该条目改为指向需要凭证的上游时,还应替换它的 URL。如果上游要求 x-api-key,请改用 api_key。echo Agent 本身不验证凭证。如需在本地测试凭证转发,请跳过这些示例,继续阅读可选:使用本地测试代理验证;该部分会提供专用 Token 和最终资源更新。
AISIX Cloud
导出凭证,然后更新已注册 Agent:
export A2A_AGENT_TOKEN="YOUR_UPSTREAM_TOKEN"
curl -fsS -X PATCH "$AISIX_CP/a2a_agents/$A2A_AGENT_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF | jq
{
"auth_type": "bearer",
"secret": "${A2A_AGENT_TOKEN}"
}
EOF
该凭证为只写字段:AISIX Cloud 会对其进行静态加密,并且不会在创建、列表或更新响应中返回。发送新的 secret 会轮换凭证。从使用凭证的模式改为 none 会清除已存储的凭证。
开源 AISIX 网关
将 a2a_agents 中现有的 echo-agent 条目替换为以下更新后的条目。该条目引用网关环境变量。保留无关的 Agent 和集合:
a2a_agents:
- name: echo-agent
url: http://aisix-a2a-echo:8080
protocol_version: "1.0"
auth_type: bearer
secret: ${A2A_AGENT_TOKEN}
加载文件前,请在网关进程环境中设置 A2A_AGENT_TOKEN。如果被引用的变量未设置或为空,验证将失败。如果该变量已存在于运行中的容器内,请验证完整文件并发送 SIGHUP:
docker exec aisix-quickstart \
aisix validate --resources /etc/aisix/resources.yaml
docker kill --signal HUP aisix-quickstart
新增或修改容器环境变量时,需要使用新值重新创建该容器。有关验证和重新创建流程,请参阅重新加载资源文件。
凭证失败
上游凭证绝不会传递给调用客户端。AISIX 提供的 Agent Card 包含上游 Agent 的元数据,并会将服务 URL 重写为网关路径,但不会包含已配置的凭证。
如果上游拒绝已过期、已轮换或已撤销的凭证,只有对该 Agent 的调用会失败。AISIX 返回 HTTP 502;上游状态会出现在 JSON-RPC 错误消息中,但上游响应正文不会代理给调用方。