Bezpieczny dostęp do serwerów MCP w usłudze API Management

DOTYCZY: Deweloper | Podstawowa | Podstawowa wersja 2 | Standardowa | Standardowa wersja 2 | Premium | Premium wersja 2

Korzystając z wsparcia serwerów MCP w API Management, możesz udostępniać i zarządzać dostępem do serwerów MCP oraz ich narzędzi. W tym artykule opisano sposób zabezpieczania dostępu do serwerów MCP zarządzanych w usłudze API Management, w tym zarówno serwerów MCP udostępnianych z zarządzanych interfejsów API REST, jak i istniejących serwerów MCP hostowanych poza usługą API Management.

Możesz zabezpieczyć dostęp przychodzący do serwera MCP (z klienta MCP do usługi API Management) i dostęp wychodzący (z usługi API Management do serwera MCP).

Bezpieczny dostęp przychodzący

Uwierzytelnianie oparte na kluczach

Jeśli serwer MCP jest chroniony kluczem subskrypcyjnym API Management przekazanym w nagłówku Ocp-Apim-Subscription-Key , klienci MCP mogą prezentować klucz w przychodzących żądaniach, a API Management waliduje klucz. Na przykład w Visual Studio Code możesz dodać sekcję headers do konfiguracji serwera MCP, aby uwzględnić klucz subskrypcyjny w nagłówkach żądań:

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

Uwaga / Notatka

Bezpiecznie zarządzaj kluczami subskrypcyjnymi, korzystając z ustawień przestrzeni roboczej Visual Studio Code lub bezpiecznych wejść.

Uwierzytelnianie oparte na tokenach (OAuth 2.1 z identyfikatorem Entra firmy Microsoft)

Klienci MCP mogą prezentować tokeny OAuth lub JWT wydawane przez Microsoft Entra ID, używając nagłówka Authorization i weryfikowanych przez API Management.

Na przykład użyj zasady validate-azure-ad-token, aby zweryfikować tokeny 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>

Przekazywanie tokenów do zaplecza

Nagłówki żądań są automatycznie przekazywane (z pewnymi wyłączeniami) do wywołań narzędzi MCP. Ta funkcja upraszcza integrację z docelowymi interfejsami API, które używają nagłówków do trasowania, przekazywania kontekstu lub uwierzytelniania.

Jeśli musisz jawnie przekazać nagłówek Authorization , aby zweryfikować nadchodzące żądania, zastosuj jedno z następujących sposobów:

  • Wyraźnie określ Authorization jako wymagany nagłówek w ustawieniach API i przekaż ten nagłówek w zasadzie Outbound.

    Przykładowy fragment kodu zasad:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Użyj menedżera poświadczeń i zasad usługi API Management (get-authorization-context, set-header), aby bezpiecznie przekazać token. Aby dowiedzieć się więcej, zobacz Bezpieczny dostęp wychodzący.

Aby uzyskać więcej opcji autoryzacji dla ruchu przychodzącego i przykładów, zobacz:

Zabezpieczanie dostępu wychodzącego

Użyj menedżera poświadczeń w API Management, aby bezpiecznie dołączać tokeny OAuth 2.0 do żądań do interfejsu API zaplecza wysyłanych przez narzędzia serwera MCP.

Kroki konfiguracji dostępu wychodzącego opartego na OAuth 2.0

Krok 1: Zarejestruj aplikację u dostawcy tożsamości.

Krok 2. Utwórz dostawcę poświadczeń w usłudze API Management połączonego z dostawcą tożsamości.

Krok 3: Konfigurowanie połączeń w menedżerze poświadczeń.

Krok 4: Stosowanie zasad usługi API Management w celu dynamicznego pobierania i dołączania poświadczeń.

Na przykład następująca zasada pobiera token dostępu z menedżera poświadczeń i ustawia go w nagłówku Authorization żądania wychodzącego:

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

Przewodnik krok po kroku dotyczący wywoływania przykładowego backendu przy użyciu poświadczeń wygenerowanych w menedżerze poświadczeń znajdziesz tutaj: Konfigurowanie menedżera poświadczeń — GitHub.