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

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

Med stöd för MCP-server i API Management kan du exponera och styra åtkomsten 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 skyddas med en API Management-prenumerationsnyckel som skickas i ett Ocp-Apim-Subscription-Key huvud kan MCP-klienter presentera nyckeln i inkommande begäranden och MCP-servern kan verifiera nyckeln. I Visual Studio Code kan du till exempel lägga till ett headers avsnitt i MCP-serverkonfigurationen för att kräva prenumerationsnyckeln i begäranderubrikerna:

{
  "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 på ett säkert sätt med hjälp av Visual Studio Code-arbetsyteinställningar eller säkra indata.

Tokenbaserad autentisering (OAuth 2.1 med Microsoft Entra-ID)

MCP-klienter kan presentera OAuth-token eller JWT:er som utfärdats av Microsoft Entra ID med hjälp av ett Authorization huvud och verifierats 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

Begärandehuvuden vidarebefordras automatiskt (med vissa undantag) till MCP-verktygsanrop, vilket förenklar integreringen med underordnade API:er som förlitar sig på rubriker för routning, kontext eller autentisering.

Om du kräver explicit vidarebefordran av Authorization-huvudet för att verifiera inkommande begäranden, kan du använda något av följande sätt:

  • Authorization Definiera uttryckligen som ett obligatoriskt huvud i API-inställningarna och vidarebefordra huvudet i Outbound principen.

    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. Mer information finns i Skydda utgående åtkomst .

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

Skydda utgående åtkomst

Använd API Managements autentiseringshanterare för att på ett säkert sätt mata in OAuth 2.0-token för serverdels-API-begäranden som görs av MCP-serververktyg.

Steg för att konfigurera OAuth 2-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.