上游认证
每个已注册的 MCP 服务器都可以定义 AISIX 如何认证到该上游服务器。AISIX 在网关侧持有上游凭证,并在列出工具或转发工具调用时出示它。MCP 客户端发送给 AISIX 的调用方 API Key 只用于 认证调用方到 AISIX,绝不会转发或暴露给上游 MCP 服务器。
在注册或更新 MCP 服务器 时,通过 auth_type 字段及对应认证模式需要的字段设置凭证。
认证模式
请选择与上游 MCP 服务器认证方式匹配的模式:
auth_type | 上游凭证 | AISIX 如何出示 |
|---|---|---|
none | 无 | 不发送凭证。 |
bearer | secret 中的 Bearer Token | Authorization: Bearer <secret> |
api_key | secret 中的 API Key | x-api-key: <secret> |
oauth2 | client_id + token_url + secret | AISIX 先获取 access Token,然后发送 Authorization: Bearer <access_token>。 |
secret 保存 AISIX 需要向上游出示的明文凭证。该凭证只在网关侧使用,不会发送给调用方客户端。要轮换凭证,请使用新的 secret 更新资源。
无认证
当上游 MCP 服务器不需要凭证时使用 none,例如只在可信内部网络中可访问的服务器。
下面的示例会创建一个不带上游凭证的服务器资源:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/mcp_servers" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "runbooks",
"url": "https://runbooks.internal/mcp",
"auth_type": "none"
}'
auth_type 默认为 none,因此也可以省略。none 类型的服务器不应设置 secret、client_id、token_url 和 scopes。
Bearer Token
当上游服务器期望在 Authorization 请求头中收到静态 Token 时使用 bearer。
下面的示例会创建一个服务器资源,并配置 AISIX 向上游发送的 Bearer Token:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/mcp_servers" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "github",
"url": "https://mcp.example.com/mcp",
"auth_type": "bearer",
"secret": "YOUR_UPSTREAM_MCP_TOKEN"
}'
❶ bearer 会在每个发往该上游的请求中发送 Authorization: Bearer <secret>。
❷ secret 必填且不能为空。
API Key
当上游服务器期望在 x-api-key 请求头中收到 Key 时使用 api_key。
下面的示例会创建一个服务器资源,并配置 AISIX 向上游发送的 API Key:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/mcp_servers" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "catalog",
"url": "https://catalog.example.com/mcp",
"auth_type": "api_key",
"secret": "YOUR_UPSTREAM_API_KEY"
}'
❶ api_key 会在每个发往 该上游的请求中发送 x-api-key: <secret>。
❷ secret 必填且不能为空。
OAuth 2.0 客户端凭证
当上游服务器接受 OAuth 2.0 access Token,且你拥有面向它的机器对机器客户端凭证时使用 oauth2。
AISIX 会在 Token 端点交换客户端凭证,把 access Token 发送给上游,并复用到即将过期前。如果上游服务器以未授权拒绝某个 Token,AISIX 会丢弃缓存的 Token,并在下次调用时获取新 Token。
下面的示例会创建一个服务器资源,并配置 AISIX 用于该上游的 OAuth 客户端凭证:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/mcp_servers" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"display_name": "orders",
"url": "https://orders.example.com/mcp",
"auth_type": "oauth2",
"client_id": "aisix-gateway",
"token_url": "https://auth.example.com/oauth/token",
"secret": "YOUR_OAUTH_CLIENT_SECRET",
"scopes": ["mcp.read", "mcp.write"]
}'
❶ oauth2 表示该上游使用 OAuth 2.0 客户端凭证授权。
❷ client_id、token_url 和 secret 是 oauth2 服务器的必填字段。
❸ scopes 可选。AISIX 会用空格拼接这些值,并作为 Token 请求的 scope 参数。
AISIX 会把 access Token 保留在网关侧,绝不会返回给调用方。
凭证处理
AISIX 会在创建或更新服务器时根据 auth_type 校验凭证字段。不满足这些规则的服务器会在写入时被拒绝。
如果凭证后续失效(例如被轮换或吊销),只有该服务器的工具会不可用,其它已注册 MCP 服务器不受影响。AISIX 会记录失败,但不会把凭证细节暴露给调用方 Agent。
下一步
你现在已经了解 AISIX 如何认证到上游 MCP 服务器。使用下面的指南控制哪些调用方可以访问这些工具,以及如何治理相关流量: