Compartir a través de


Protección del acceso a servidores MCP en API Management

APLICA A: desarrollador | Básico | Básico v2 | Estándar | Estándar v2 | Premium | Premium v2

Con la compatibilidad con el servidor MCP en API Management, puede exponer y controlar el acceso a los servidores MCP y sus herramientas. En este artículo se describe cómo proteger el acceso a los servidores MCP administrados en API Management, incluidos los servidores MCP expuestos desde las API REST administradas y los servidores MCP existentes hospedados fuera de API Management.

Puede asegurar el acceso entrante al servidor MCP (desde un cliente MCP a API Management), el acceso saliente (desde API Management al servidor MCP), o ambos.

Protección del acceso entrante

Autenticación basada en claves

Si el servidor MCP está protegido con una clave de suscripción de API Management pasada en un Ocp-Apim-Subscription-Key encabezado, los clientes de MCP pueden presentar la clave en las solicitudes entrantes y el servidor MCP puede validar la clave. Por ejemplo, en Visual Studio Code, puede agregar una headers sección a la configuración del servidor MCP para requerir la clave de suscripción en los encabezados de solicitud:

{
  "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>"
  }
}

Nota:

Administre de forma segura las claves de suscripción mediante la configuración del área de trabajo de Visual Studio Code o las entradas seguras.

Autenticación basada en tokens (OAuth 2.1 con el identificador de Microsoft Entra)

Los clientes de MCP pueden presentar tokens o JWT de OAuth emitidos por Microsoft Entra ID usando un encabezado Authorization que son validados por API Management.

Por ejemplo, use la directiva validate-azure-ad-token para validar los tokens de identificador de Entra de Microsoft:

<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>

Reenvío de tokens al back-end

Los encabezados de solicitud se reenvían automáticamente (con ciertas exclusiones) a las invocaciones de la herramienta MCP, lo que simplifica la integración con las API posteriores que se basan en encabezados para el enrutamiento, el contexto o la autenticación.

Si necesita reenvío explícito del Authorization encabezado para validar las solicitudes entrantes, puede usar uno de los métodos siguientes:

  • Defina Authorization explícitamente como un encabezado necesario en la configuración de la API y reenvíe el encabezado en la Outbound directiva.

    Fragmento de código de directiva de ejemplo:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Use el administrador de credenciales y las directivas de API Management (get-authorization-context, set-header) para reenviar el token de forma segura. Consulte Protección del acceso saliente para obtener más información.

Para obtener más opciones y ejemplos de autorización de entrada, consulte:

Protección del acceso saliente

Use el administrador de credenciales de API Management para insertar tokens de OAuth 2.0 de forma segura para las solicitudes de API de back-end realizadas por las herramientas del servidor MCP.

Pasos para configurar el acceso saliente basado en OAuth 2

Paso 1: Registre una aplicación en el proveedor de identidades.

Paso 2: Cree un proveedor de credenciales en API Management vinculado al proveedor de identidades.

Paso 3: Configure las conexiones en el administrador de credenciales.

Paso 4: Aplique directivas de API Management para capturar y adjuntar credenciales dinámicamente.

Por ejemplo, la siguiente directiva recupera un token de acceso del administrador de credenciales y lo establece en el Authorization encabezado de la solicitud saliente:

<!-- 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>

Para obtener una guía paso a paso para llamar a un back-end de ejemplo mediante credenciales generadas en el administrador de credenciales, consulte Configuración del administrador de credenciales: GitHub.