你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

适用于:基本 | 基本 v2 | 标准 | 标准 v2 | 高级 | 高级 v2

借助 API 管理中的 MCP 服务器支持,可以公开和管理对 MCP 服务器及其工具的访问。 本文介绍如何保护对 API 管理中托管的 MCP 服务器的访问,包括从托管 REST API 公开的 MCP 服务器和 API 管理外部托管的现有 MCP 服务器。

可以保护对 MCP 服务器的入站访问(从 MCP 客户端到 API 管理)和出站访问(从 API 管理到 MCP 服务器)。

保护入站访问

基于密钥的身份验证

如果 MCP 服务器受到标头中 Ocp-Apim-Subscription-Key 传递的 API 管理订阅密钥的保护,MCP 客户端可以在传入请求中显示密钥,MCP 服务器可以验证密钥。 例如,在 Visual Studio Code 中,可以将节 headers 添加到 MCP 服务器配置,以要求请求标头中的订阅密钥:

{
  "name": "My MCP Server",
  "type": "remote",
  "url": "https://my-api-management-instance.azure-api.net/my-mcp-server",    
  "transport": "streamable-http",
  "headers": {
    "Ocp-Apim-Subscription-Key": "<subscription-key>"
  }
}

注释

使用 Visual Studio Code 工作区设置或安全输入安全地管理订阅密钥。

基于令牌的身份验证(具有 Microsoft Entra ID 的 OAuth 2.1)

MCP 客户端可以使用标头提供由 Microsoft Entra ID Authorization 颁发的 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>

将令牌转发到后端

默认情况下,API 管理不会自动将传入标头(如 Authorization MCP 服务器后端)转发。 若要立即安全地转发令牌,目前有以下选项:

  • 显式定义为 Authorization API 设置中的必需标头,并在策略中 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安全地转发令牌。 有关详细信息,请参阅 安全出站访问

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

保护出站访问

使用 API 管理的 凭据管理器 安全地为 MCP 服务器工具发出的后端 API 请求注入 OAuth 2.0 令牌。

配置基于 OAuth 2 的出站访问的步骤

步骤 1: 在标识提供者中注册应用程序。

步骤 2: 在链接到标识提供者的 API 管理中创建凭据提供程序。

步骤 3: 在凭据管理器中配置连接。

步骤 4: 应用 API 管理策略以动态提取和附加凭据。

例如,以下策略从凭据管理器检索访问令牌,并在传出请求的标头中 Authorization 设置它:

<!-- Add to inbound policy. -->
<get-authorization-context
    provider-id="your-credential-provider-id" 
    authorization-id="auth-01" 
    context-variable-name="auth-context" 
    identity-type="managed" 
    ignore-error="false" />
<!-- Attach the token to the backend call -->
<set-header name="Authorization" exists-action="override">
    <value>@("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</value>
</set-header>

有关使用凭据管理器中生成的凭据调用示例后端的分步指南,请参阅 配置凭据管理器 - GitHub