客户端身份认证
MCP 客户端可以通过两类入口访问 AISIX:聚合入口 /mcp 以 <server>__<tool> 形式提供所有已注册服务器的工具,/mcp/{server} 则以工具的原始名称提供单个服务器的工具。本文介绍调用方如何在这些入口上证明自己的身份。
客户端身份认证与上游身份认证相互独立:客户端发送给 AISIX 的凭证用于向 AISIX 标识调用方,而 AISIX 发送给上游 MCP 服务器的凭证由网关侧持有,永远不会被转发。
共有三种模式,同一个环境可以组合使用:
| 模式 | 客户端发送 | 适用场景 |
|---|---|---|
| 网关 API Key | Authorization: Bearer <API Key> | 默认方式。机器对机器的调用方,以及由你签发 Key 的 Agent。 |
| OAuth 登录 | 身份提供商签发的 Access Token | 能够自行发现登录流程的标准 MCP 客户端。 |
| 匿名 | 不发送任何凭证 | 可信网络中无法携带凭证的客户端。 |
无论采用哪种模式,调用方最终都会落到一个 API Key 主体上:它的工具授权、限流、预算、Guardrails 和用量归属全部生效。这也是匿名调用方与认证调用方同样可治理的原因。
前置条件
开始前,请准备以下环境:
- 对于 AISIX Cloud,准备一个环境和写入作用域管理员 Token。对于本地部署,请按照 AISIX Cloud 快速入门操作。若要申请混合云访问权限,请联系 API7。
- 对于开源 AISIX 网关,准备一个加载声明式资源文件的网关。设置 MCP 网关提供了可运行的 MCP 服务器条目以及验证和重新加载工作流。
- AISIX Cloud 示例需要 cURL。
网关 API Key
这是默认方式,无需任何配置。客户端在每个请求上发送自己的 Key:
curl -sS -X POST "$AISIX_GATEWAY/mcp" \
-H "Authorization: Bearer $AISIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
该 Key 的授权决定了调用方能看到和调用哪些工具。将 Key 限定到特定工具、整个服务器或全部工具,参见控制工具访问;在环境或团队级别授权,参见 MCP 访问策略。
也可以使用 x-api-key: <API Key> 作为替代请求头。
OAuth 登录
桌面助手等标准 MCP 客户端可以让用户登录,而不必粘贴一个 Key。它们的做法是:读取 401 响应上的 WWW-Authenticate 请求头,获取其中指向的受保护资源元数据,然后针对元数据中声明的授权服务器执行 OAuth 流程。
当环境同时具备以下两项时,AISIX 会发布该元数据:
- 一个规范的 MCP 资源 URL——客户端访问该环境
/mcp入口所使用的公开 URL;以及 - 至少一个已启用的 OIDC 信任提供商,即 Token 必须来自的授权服务器。
两者都配置后,GET /.well-known/oauth-protected-resource(以及 /.well-known/oauth-protected-resource/mcp)会返回资源标识、Token 可以来自的 issuer,以及 Token 必须携带的 scope。若未配置,这些路由返回 404,401 响应也不携带 challenge,与该能力不存在时完全一致。
Access Token 的 audience 声明必须包含该资源 URL。这是最常见的配置错误:即使登录成功,audience 不匹配的 Token 仍会在网关侧被拒绝。
AISIX Cloud
在环境上设置资源 URL:
curl -sS -X PATCH "$AISIX_CP/environments/$ENV_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mcp_resource_url": "https://gateway.example.com/mcp"
}'
该 URL 必须是绝对的 http 或 https URL,路径必须恰好是 /mcp,不能带查询参数或片段,也不能内嵌凭证——它会被发布在一个无需认证的端点上。传入 null 可清除该值并关闭 OAuth 发现。
在 Dashboard 中,同样的设置位于环境的 MCP Access 页面;当已启用的提供商的 audiences 不包含该 URL 时,该页面还会给出提示。
开源 AISIX 网关
在 resources.yaml 中添加设置条目和信任提供商:
_format_version: "1"
mcp_auth_settings:
- resource_url: https://gateway.example.com/mcp
oidc_providers:
- name: corp-sso
issuer: https://sso.example.com/realms/agents
audiences:
- https://gateway.example.com/mcp
required_scopes:
- mcp:tools
mcp_auth_settings 最多只能有一条。第二条会在加载时被拒绝;若重复条目以其他方式进入了运行中的网关,发现面会保持关闭,而不是从中挑选一条。
匿名访问
匿名访问允许不携带任何凭证的客户端访问你为其开放的入口。它面向的场景是:客户端集群原本对接的网关从不要求凭证,如今逐个改造客户端并不现实。
匿名请求仍然以你指定的主体运行——环境中的一个 API Key——因此工具授权、限流、预算、Guardrails 和用量归属继续生效。这里没有跳过任何环节,被替换掉的只是凭证校验。
任何能从允许网段访问该网关的人,都可以在没有凭证的情况下调用被允许的工具,相关用量会计入该环境。请把来源网段白名单当作真正的访问控制来对待,并把主体的工具授权收窄到客户端实际需要的范围。