
Azure API 管理器充当 MCP 服务器的 AI 网关。
此示例实现了最新的 MCP 授权规范。
这是一个序列图,用于理解流程。
注册 Microsoft.App 资源提供程序。
az provider register --namespace Microsoft.App --wait。Register-AzResourceProvider -ProviderNamespace Microsoft.App。然后在一段时间后运行 (Get-AzResourceProvider -ProviderNamespace Microsoft.App).RegistrationState 来检查注册是否完成。运行此 azd 命令以配置 API 管理服务、函数应用(含代码)以及所有其他所需的 Azure 资源
azd up
在一个新的终端窗口中,安装并运行 MCP 检查器
npx @modelcontextprotocol/inspector
使用 CTRL+点击从应用程序显示的 URL 加载 MCP 检查器 Web 应用(例如 http://127.0.0.1:6274/#resources)
设置传输类型为 SSE
设置 URL 为您正在运行的 API 管理器 SSE 终点,该终点在 azd up 后显示,并连接:
https://<apim-servicename-from-azd-output>.azure-api.net/mcp/sse
列出工具。点击一个工具并运行工具。
此解决方案在 Azure 上部署了一个安全的 MCP(模型上下文协议)服务器基础设施。架构实现了一个多层安全模型,其中 Azure API 管理器作为智能网关处理身份验证、授权和请求路由。

基础结构配置了以下 Azure 资源:
用户分配的托管标识 - 使服务到服务的身份验证安全
Entra ID 应用程序注册 - OAuth2/OpenID Connect 客户端用于认证
vnetEnabled 为真时
Azure API 管理器作为安全边界,实现:
Azure 函数提供:
托管标识消除了对:
APIM 实例配置有两个主要 API,它们协同工作以实现 MCP 授权规范:
/oauth/*)此 API 实现了 MCP 规范所需的所有 OAuth 2.0 授权服务器功能:
授权端点 (GET /authorize)
同意管理 (GET/POST /consent)
OAuth 元数据端点 (GET /.well-known/oauth-authorization-server)
客户端注册 (POST /register)
令牌端点 (POST /token)
OAuth API 使用多个 APIM 命名值进行配置:
McpClientId - 注册的 Entra ID 应用程序客户端 IDEntraIDFicClientId - 用于令牌交换的服务标识客户端 IDAPIMGatewayURL - 回调和元数据端点的基础 URLOAuthScopes - 请求的 OAuth 范围(openid + Microsoft Graph)EncryptionKey / EncryptionIV - 用于会话密钥加密/mcp/*)此 API 提供实际的 MCP 协议端点,并实施安全措施:
服务器发送事件端点 (GET /sse)
消息端点 (POST /message)
MCP API 对所有操作应用全面的安全策略:
授权标头验证
<check-header name="Authorization" failed-check-httpcode="401"
failed-check-error-message="Not authorized" ignore-case="false" />
会话密钥解密
令牌缓存查找
<cache-lookup-value key="@($"EntraToken-{context.Variables.GetValueOrDefault("decryptedSessionKey")}")"
variable-name="accessToken" />
访问令牌验证
后端认证
<set-header name="x-functions-key" exists-action="override">
<value>{{function-host-key}}</value>
</set-header>
解决方案实现了一个复杂的多层安全模型:
第 1 层:OAuth 2.0/PKCE 认证
第 2 层:会话密钥加密
第 3 层:功能级安全
第 4 层:Azure 平台安全
这种分层方法确保即使一个安全边界被破坏,多个额外的保护仍然存在。