Proteggere l'accesso ai server MCP in Gestione API

SI APPLICA A: Sviluppatore | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

Utilizzando il supporto ai server MCP nella gestione API, puoi esporre e governare l'accesso ai server MCP e ai loro strumenti. Questo articolo descrive come proteggere l'accesso ai server MCP gestiti in Gestione API, inclusi i server MCP esposti dalle API REST gestite e dai server MCP esistenti ospitati all'esterno di Gestione API.

È possibile proteggere o entrambi l'accesso in ingresso al server MCP (da un client MCP a Gestione API) e l'accesso in uscita (da Gestione API al server MCP).

Proteggere l'accesso in ingresso

Autenticazione basata su chiave

Se il server MCP è protetto con una chiave di abbonamento API Management passata nell'intestazione Ocp-Apim-Subscription-Key dell'intestazione (API) i client MCP possono presentare la chiave nelle richieste in arrivo e API Management valida la chiave. Ad esempio, in Visual Studio Code, puoi aggiungere una headers sezione alla configurazione del server MCP per includere la chiave di abbonamento nelle intestazioni delle richieste:

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

Annotazioni

Gestisci in modo sicuro le chiavi di abbonamento utilizzando le impostazioni dello spazio di lavoro di Visual Studio Code o input sicuri.

Autenticazione basata su token (OAuth 2.1 con Microsoft Entra ID)

I client MCP possono presentare token OAuth o JWT emessi da Microsoft Entra ID utilizzando un'intestazione Authorization e validati da API Management.

Ad esempio, usare il criterio validate-azure-ad-token per convalidare i 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>

Inoltrare i token al back-end

Le intestazioni delle richieste vengono inoltrate automaticamente, salvo alcune eccezioni, alle invocazioni degli strumenti MCP. Questa caratteristica semplifica l'integrazione con le API a valle che si basano su header per il routing, il contesto o l'autenticazione.

Se è necessario inoltrare esplicitamente l'intestazione Authorization per validare le richieste in arrivo, utilizza uno dei seguenti approcci:

  • Definire in modo esplicito Authorization come intestazione obbligatoria nelle impostazioni dell'API e inoltrare l'intestazione nei Outbound criteri.

    Frammento di criterio di esempio:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Usare Gestione credenziali e criteri di Gestione API (get-authorization-context, set-header) per inoltrare in modo sicuro il token. Per saperne di più, vedi Accesso in uscita sicuro.

Per altre opzioni di autorizzazione in ingresso ed esempi, vedere:

Proteggere l'accesso in uscita

Usa il credential manager di API Management per iniettare in modo sicuro i token OAuth 2.0 per le richieste API backend effettuate dagli strumenti server MCP.

Passaggi per configurare l'accesso in uscita basato su OAuth 2.0

Passaggio 1: Registrare un'applicazione nel provider di identità.

Passaggio 2: Creare un provider di credenziali in Gestione API collegato al provider di identità.

Passaggio 3: Configurare le connessioni all'interno di Gestione credenziali.

Passaggio 4: Applicare i criteri di Gestione API per recuperare e allegare le credenziali in modo dinamico.

Ad esempio, il criterio seguente recupera un token di accesso da gestione credenziali e lo imposta nell'intestazione Authorization della richiesta in uscita:

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

Per una guida dettagliata per chiamare un back-end di esempio usando le credenziali generate in Gestione credenziali, vedere Configurare gestione credenziali - GitHub.