在 API Management 中保护对 MCP 服务器的访问

通过在 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-contextset-header)安全地转发令牌。 欲了解更多信息,请参见 “安全外呼访问”。

有关更多入站授权选项和示例,请参阅: