Condividi tramite


Proteggere l'accesso ai server MCP in Gestione API

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

Con il supporto del server MCP in Gestione API, è possibile esporre e gestire l'accesso ai server MCP e ai relativi 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 sottoscrizione di Gestione API passata in un'intestazione Ocp-Apim-Subscription-Key, i client MCP possono presentare la chiave nelle richieste in ingresso e il server MCP può convalidare la chiave. In Visual Studio Code, ad esempio, è possibile aggiungere una sezione headers alla configurazione del server MCP per richiedere la chiave di sottoscrizione nelle intestazioni della richiesta:

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

Gestire in modo sicuro le chiavi di sottoscrizione usando le impostazioni dell'area di lavoro di Visual Studio Code o gli 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 usando un'intestazione Authorization e convalidata da Gestione API.

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 (con determinate esclusioni) alle chiamate dello strumento MCP, semplificando l'integrazione con le API downstream che si basano sulle intestazioni per il routing, il contesto o l'autenticazione.

Se è necessario inoltrare esplicitamente l'intestazione Authorization per convalidare le richieste in ingresso, è possibile usare uno degli approcci seguenti:

  • 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 informazioni dettagliate, vedere Proteggere l'accesso in uscita.

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

Proteggere l'accesso in uscita

Usare Gestione credenziali di Gestione API per inserire in modo sicuro i token OAuth 2.0 per le richieste API back-end effettuate dagli strumenti server MCP.

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

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.