Beveiligde toegang tot MCP-servers in API Management

VAN TOEPASSING OP: Ontwikkelaar | Basic | Basic v2 | Standaard | Standard v2 | Premium | Premium v2

Door MCP-serverondersteuning te gebruiken in API-beheer, kun je toegang tot MCP-servers en hun tools openstellen en beheren. In dit artikel wordt beschreven hoe u de toegang tot MCP-servers beveiligt die worden beheerd in API Management, inclusief zowel MCP-servers die worden weergegeven vanuit beheerde REST API's als bestaande MCP-servers die buiten API Management worden gehost.

U kunt zowel binnenkomende toegang tot de MCP-server (van een MCP-client naar API Management) als uitgaande toegang (van API Management naar de MCP-server) beveiligen.

Binnenkomende toegang beveiligen

Verificatie op basis van sleutels

Als de MCP-server wordt beschermd met een API Management-abonnementssleutel die in de Ocp-Apim-Subscription-Key header wordt doorgegeven, kunnen MCP-clients de sleutel tonen bij binnenkomende verzoeken en valideert API Management de sleutel. Bijvoorbeeld, in Visual Studio Code kun je een headers sectie toevoegen aan de MCP-serverconfiguratie om de abonnementssleutel in requestheaders op te nemen:

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

Opmerking

Beheer abonnementssleutels veilig door gebruik te maken van Visual Studio Code workspace-instellingen of beveiligde invoer.

Verificatie op basis van tokens (OAuth 2.1 met Microsoft Entra-id)

MCP-clients kunnen OAuth-tokens of JWT's presenteren die zijn uitgegeven door Microsoft Entra ID door een Authorization header te gebruiken en gevalideerd door API Management.

Gebruik bijvoorbeeld het beleid validate-azure-ad-token om Microsoft Entra ID-tokens te valideren:

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

Tokens doorsturen naar back-end

Request-headers worden automatisch doorgestuurd (met bepaalde uitzonderingen) naar MCP-tool-aanroepen. Deze functie vereenvoudigt de integratie met downstream API's die afhankelijk zijn van headers voor routering, context of authenticatie.

Als je de Authorization header expliciet moet doorsturen om binnenkomende verzoeken te valideren, gebruik dan een van de volgende benaderingen:

  • Definieer expliciet Authorization als een vereiste header in de API-instellingen en stuur de header in het Outbound beleid door.

    Voorbeeld van beleidsfragment:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Gebruik API Management-referentiebeheer en -beleid (get-authorization-context, set-header) om het token veilig door te sturen. Voor meer informatie, zie Veilige uitgaande toegang.

Zie voor meer opties en voorbeelden voor binnenkomende autorisatie:

Uitgaande toegang beveiligen

Gebruik de credentialmanager van API Management om OAuth 2.0-tokens veilig te injecteren voor backend-API-verzoeken die MCP-servertools maken.

Stappen om OAuth 2.0-gebaseerde uitgaande toegang te configureren

Stap 1: Registreer een toepassing in de id-provider.

Stap 2: Maak een referentieprovider in API Management die is gekoppeld aan de id-provider.

Stap 3: Configureer verbindingen in referentiebeheer.

Stap 4: Pas API Management-beleid toe om referenties dynamisch op te halen en te koppelen.

Met het volgende beleid wordt bijvoorbeeld een toegangstoken opgehaald uit het aanmeldingsgegevensbeheer en ingesteld in de Authorization header van het uitgaande verzoek:

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

Zie Referentiebeheer configureren - GitHub voor een stapsgewijze handleiding voor het aanroepen van een voorbeeldback-end met behulp van referenties die zijn gegenereerd in referentiebeheer.