Säker åtkomst till MCP-servrar i API Management

GÄLLER FÖR: Utvecklare | Grundläggande | Basic v2 | Standard | Standard v2 | Premium | Premium v2

Genom att använda MCP-serverstöd i API-hantering kan du exponera och styra åtkomst till MCP-servrar och deras verktyg. Den här artikeln beskriver hur du skyddar åtkomsten till MCP-servrar som hanteras i API Management, inklusive både MCP-servrar som exponeras från hanterade REST-API:er och befintliga MCP-servrar som finns utanför API Management.

Du kan skydda antingen eller båda inkommande åtkomsten till MCP-servern (från en MCP-klient till API Management) och utgående åtkomst (från API Management till MCP-servern).

Säker inkommande åtkomst

Nyckelbaserad autentisering

Om MCP-servern är skyddad med en API-hanteringsprenumerationsnyckel som skickas i Ocp-Apim-Subscription-Key headern, kan MCP-klienter visa nyckeln i inkommande förfrågningar, och API Management validerar nyckeln. Till exempel kan du i Visual Studio Code lägga till en headers sektion i MCP-serverkonfigurationen för att inkludera prenumerationsnyckeln i begäransökor:

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

Anmärkning

Hantera prenumerationsnycklar säkert genom att använda Visual Studio Code-arbetsytinställningar eller säkra inmatningar.

Tokenbaserad autentisering (OAuth 2.1 med Microsoft Entra-ID)

MCP-klienter kan presentera OAuth-tokens eller JWT:er utfärdade av Microsoft Entra ID genom att använda en Authorization header och valideras av API Management.

Använd till exempel policyn validate-azure-ad-token för att verifiera Microsoft Entra ID-token:

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

Vidarebefordra token till serverdelen

Förfrågningshuvuden vidarebefordras automatiskt (med vissa undantag) till MCP-verktygsinkallelser. Denna funktion förenklar integrationen med nedströms API:er som förlitar sig på headers för routing, kontext eller autentisering.

Om du behöver vidarebefordra Authorization headern uttryckligen för att validera inkommande förfrågningar, använd en av följande metoder:

  • Definiera Authorization uttryckligen som en obligatorisk rubrik i API-inställningarna och vidarebefordra rubriken i principen Outbound.

    Exempel på principfragment:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Använd API Managements autentiseringshanterare och principer (get-authorization-context, set-header) för att vidarebefordra token på ett säkert sätt. För att lära dig mer, se Säker utgående åtkomst.

Mer alternativ och exempel för inkommande auktorisering finns i:

Skydda utgående åtkomst

Använd API Managements credential manager för att säkert injicera OAuth 2.0-tokens för backend-API-förfrågningar som MCP-serververktyg gör.

Steg för att konfigurera OAuth 2.0-baserad utgående åtkomst

Steg 1: Registrera ett program i identitetsprovidern.

Steg 2: Skapa en autentiseringsprovider i API Management som är länkad till identitetsprovidern.

Steg 3: Konfigurera anslutningar i autentiseringshanteraren.

Steg 4: Använd API Management-principer för att dynamiskt hämta och bifoga autentiseringsuppgifter.

Följande princip hämtar till exempel en åtkomsttoken från autentiseringshanteraren och anger den Authorization i rubriken för den utgående begäran:

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

En stegvis guide för att anropa en exempelserverdel med autentiseringsuppgifter som genereras i autentiseringshanteraren finns i Konfigurera autentiseringshanteraren – GitHub.