適用於:開發人員 |基本 |基本 v2 |標準 |標準 v2 |Premium |進階 v2
透過在 API 管理中使用 MCP 伺服器支援,你可以公開並管理對 MCP 伺服器及其工具的存取權限。 本文說明如何保護在 API Management 中管理的 MCP 伺服器存取,包含從受控 REST API 公開的 MCP 伺服器,以及裝載在 API Management 外部的現有 MCP 伺服器。
您可以保護 MCP 伺服器的傳入存取 (從 MCP 用戶端到 API Management),以及傳出存取 (從 API Management 到 MCP 伺服器),或同時保護兩者。
保護傳入存取
金鑰型驗證
如果 MCP 伺服器在標頭中傳遞了 API Management 訂閱金鑰 Ocp-Apim-Subscription-Key ,MCP 用戶端可以在收到的請求中呈現該金鑰,API Management 則會驗證該金鑰。 例如,在 Visual Studio Code 中,你可以在 MCP 伺服器設定中新增headers一個區段,將訂閱金鑰納入請求標頭中:
{
"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>"
}
}
備註
透過使用 Visual Studio Code 工作區設定或安全輸入,安全管理訂閱金鑰。
權杖型驗證 (OAuth 2.1 搭配 Microsoft Entra ID)
MCP 用戶端可使用 Authorization 標頭提供由 Microsoft Entra ID 發行的 OAuth 權杖或 JWT,並由 API 管理進行驗證。
例如,請使用 validate-azure-ad-token 原則來驗證 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>
將權杖轉送至後端
請求標頭會自動轉送至 MCP 工具叫用,但有特定例外。 此功能簡化了與依賴標頭進行路由、上下文或認證的下游 API 的整合。
如果你需要明確轉發 Authorization 標頭來驗證收到的請求,請採用以下其中一種方法:
在 API 設定中明確將
Authorization定義為必要的標頭,並在Outbound原則中轉送該標頭。原則範例片段:
<!-- Forward Authorization header to backend --> <set-header name="Authorization" exists-action="override"> <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> </set-header>使用 API Management 認證管理員與原則 (
get-authorization-context、set-header) 來安全地轉送權杖。 欲了解更多,請參閱 「安全外撥存取」。
如需更多傳入授權選項與範例,請參閱:
保護傳出存取
使用 API Management 的 憑證管理器 ,安全地注入 OAuth 2.0 令牌,用於 MCP 伺服器工具發出的後端 API 請求。
配置基於 OAuth 2.0 的出站存取的步驟
步驟 1:在識別提供者中註冊應用程式。
步驟 2:在 API Management 中建立與識別提供者連結的認證提供者。
步驟 3:在認證管理員中設定連線。
步驟 4:套用 API Management 原則,以動態擷取並附加認證。
例如,下列原則會從認證管理員擷取存取權杖,並將其設定至傳出要求的 Authorization 標頭:
<!-- 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>
如需逐步指南,了解如何使用認證管理員產生的認證來呼叫範例後端,請參閱設定認證管理員 - GitHub。