通过在 API Management 中使用 MCP 服务器支持,你可以公开并管理对 MCP 服务器及其工具的访问。 本文介绍如何确保对在API Management中管理的MCP服务器的安全访问,包括通过托管的REST API暴露的MCP服务器,以及托管在API Management外部的现有MCP服务器。
可以确保 MCP 服务器的入站访问(从 MCP 客户端到 API 管理)和出站访问(从 API 管理到 MCP 服务器)的安全。
保护入站访问
基于密钥的身份验证
如果MCP服务器在头部传递了API管理订阅密钥 Ocp-Apim-Subscription-Key ,MCP客户端可以在收到的请求中展示该密钥,API管理则会验证该密钥。 例如,在 Visual Studio Code 中,你可以在 MCP 服务器配置中添加headers一个部分,在请求头中包含订阅密钥:
{
"name": "My MCP Server",
"type": "remote",
"url": "https://my-api-management-instance.azure-api.cn/my-mcp-server",
"transport": "streamable-http",
"headers": {
"Ocp-Apim-Subscription-Key": "<subscription-key>"
}
}
注释
通过使用 Visual Studio Code 工作区设置或安全输入,安全管理订阅密钥。
基于令牌的身份验证(具有Microsoft Entra ID的 OAuth 2.1)
MCP 客户端可以使用 Authorization 标头提供由 Microsoft Entra ID 颁发的 OAuth 令牌或 JWT,并由 API 管理进行验证。
例如,使用 validate-azure-ad-token 策略验证 Microsoft Entra ID 令牌:
<validate-azure-ad-token tenant-id="your-entra-tenant-id" header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<client-application-ids>
<application-id>your-client-application-id</application-id>
</client-application-ids>
</validate-azure-ad-token>
将令牌转发到后端
请求头会自动转发给 MCP 工具调用(某些请求头除外)。 此功能简化了与下游 API 的集成,这些 API 依赖请求头进行路由、上下文传递或身份验证。
如果你需要显式转发 Authorization 头部以验证来的请求,可以使用以下方法之一:
在 API 设置中显式将
Authorization定义为必需的标头,并在Outbound策略中转发该标头。示例策略片段:
<!-- Forward Authorization header to backend --> <set-header name="Authorization" exists-action="override"> <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> </set-header>使用 API 管理中的凭据管理器和策略(
get-authorization-context、set-header)安全地转发令牌。 欲了解更多信息,请参见 “安全外呼访问”。
有关更多入站授权选项和示例,请参阅: