Bagikan melalui


Akses aman ke server MCP di API Management

BERLAKU UNTUK: Pengembang | Basic | Basic v2 | Standar | Standar v2 | Premium | Premium v2

Dengan dukungan server MCP di API Management, Anda dapat mengekspos dan mengatur akses ke server MCP dan alatnya. Artikel ini menjelaskan cara mengamankan akses ke server MCP yang dikelola di API Management, termasuk kedua server MCP yang diekspos dari REST API terkelola dan server MCP yang ada yang dihosting di luar API Management.

Anda dapat mengamankan akses masuk atau ke server MCP (dari klien MCP ke API Management) dan akses keluar (dari API Management ke server MCP).

Mengamankan akses masuk

Autentikasi berbasis kunci

Jika server MCP dilindungi dengan kunci langganan API Management yang diteruskan di Ocp-Apim-Subscription-Key header, klien MCP dapat menyajikan kunci dalam permintaan masuk, dan server MCP dapat memvalidasi kunci. Misalnya, di Visual Studio Code, Anda dapat menambahkan headers bagian ke konfigurasi server MCP untuk memerlukan kunci langganan di header permintaan:

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

Nota

Kelola kunci langganan dengan aman menggunakan pengaturan ruang kerja Visual Studio Code atau input aman.

Autentikasi berbasis token (OAuth 2.1 dengan ID Microsoft Entra)

Klien MCP dapat menyajikan token OAuth atau JWT yang dikeluarkan oleh MICROSOFT Entra ID menggunakan Authorization header dan divalidasi oleh API Management.

Misalnya, gunakan kebijakan validate-azure-ad-token untuk memvalidasi token ID Microsoft Entra:

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

Meneruskan token ke backend

Header permintaan secara otomatis diteruskan (dengan pengecualian tertentu) ke pemanggilan alat MCP, menyederhanakan integrasi dengan API hilir yang mengandalkan header untuk perutean, konteks, atau autentikasi.

Jika Anda memerlukan penerusan Authorization header eksplisit untuk memvalidasi permintaan masuk, Anda dapat menggunakan salah satu pendekatan berikut:

  • Tentukan Authorization secara eksplisit sebagai header yang diperlukan di pengaturan API dan teruskan header dalam Outbound kebijakan.

    Contoh cuplikan kebijakan:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Gunakan manajer dan kebijakan kredensial API Management (get-authorization-context, set-header) untuk meneruskan token dengan aman. Lihat Mengamankan akses keluar untuk detailnya.

Untuk opsi dan sampel otorisasi masuk lainnya, lihat:

Mengamankan akses keluar

Gunakan manajer kredensial API Management untuk menyuntikkan token OAuth 2.0 dengan aman untuk permintaan API backend yang dibuat oleh alat server MCP.

Langkah-langkah untuk mengonfigurasi akses keluar berbasis OAuth 2

Langkah 1: Daftarkan aplikasi di IdP.

Langkah 2: Buat penyedia kredensial di API Management yang ditautkan ke idP.

Langkah 3: Mengonfigurasi koneksi dalam pengelola kredensial.

Langkah 4: Terapkan kebijakan API Management untuk mengambil dan melampirkan kredensial secara dinamis.

Misalnya, kebijakan berikut mengambil token akses dari manajer kredensial dan mengaturnya di Authorization header permintaan keluar:

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

Untuk panduan langkah demi langkah untuk memanggil contoh backend menggunakan kredensial yang dihasilkan di pengelola kredensial, lihat Mengonfigurasi pengelola kredensial - GitHub.