Token导航 LogoToken导航TokenDH.com
Remote Auth MCP Apim Py logo
运维云端stdio官方级别未说明来源级核验

Remote Auth MCP Apim Py

MCP Server

@modelcontextprotocol/inspector@0.9.0

Remote MCP server with auth gated by Azure API Management

工具数

0

提示词数

0

GitHub Stars

30

资源数

0
BicepJavaScriptAPI集成

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

localden

提供方

localden

最后核验

2026/5/18 02:52

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx @modelcontextprotocol/inspector@0.9.0

详细介绍

🤫 经过身份验证的远程MCP服务器

此示例显示了如何在Azure上部署受Entra ID保护的MCP服务器。

该示例还使用客户端获取令牌的授权模式 _对于MCP服务器_ 首先,然后使用 代表流量 将其兑换为可用于 微软图形这一切也是以一种完全隐秘的方式进行的。

⚠️ 重要提示:实验实施

\[!重要\] 这是一个实验性的实现,不应该在生产场景中使用。 此示例演示了如何通过实现OAuth 2.0动态客户端注册和PKCE流模式来构建具有Entra ID的受保护MCP服务器,这些模式可以弥补Entra ID对这些标准的本机支持中的当前差距。虽然它展示了技术上的可能性,但它仅用于教育和概念验证目的。 对于生产场景,考虑使用预先注册的应用程序和标准OAuth流的既定身份验证模式。

它的用途

\[!注意\] 您可以使用 模型上下文协议检查器Visual Studio Code 以测试此MCP服务器。

授权流程是如何工作的

此实现使用复杂的OAuth 2.0流和PKCE(代码交换证明密钥)来安全地对MCP客户端进行身份验证。以下是这一切是如何结合在一起的:

sequenceDiagram
    participant Client as MCP Client
    participant Browser as User's Browser
    participant APIM as API Management
    participant Entra as Entra ID
    participant Function as Azure Function
    participant Graph as Microsoft Graph

    Note over Client,Graph: 1. Discovery & Registration
    Client->>APIM: GET /.well-known/oauth-authorization-server
    APIM->>Client: OAuth metadata (authorization_endpoint, token_endpoint, etc.)
    
    Client->>APIM: POST /register (Dynamic Client Registration)
    Note over APIM: Store client info in CosmosDB
Generate unique client_id
    APIM->>Client: Client credentials (client_id, no secret)

    Note over Client,Graph: 2. Authorization with PKCE
    Note over Client: Generate code_verifier & code_challenge
    Client->>Browser: Open authorization URL with PKCE params
    Browser->>APIM: GET /authorize?client_id=...&code_challenge=...
    
    Note over APIM: Check for existing consent cookie
🍪 __Host-MCP_APPROVED_CLIENTS
    alt No previous consent
        APIM->>Browser: Redirect to /consent page
        Note over Browser: User reviews permissions and clicks "Allow"
        Browser->>APIM: POST /consent (with CSRF protection)
        Note over APIM: Set consent cookie
🍪 __Host-MCP_APPROVED_CLIENTS
🍪 __Host-MCP_CONSENT_STATE
    end
    
    APIM->>Browser: Redirect to Entra ID with state correlation
    Note over APIM: Set Entra state cookie
🍪 __Host-MCP_ENTRA_STATE
(contains sessionId|entraidState|clientState)
    
    Browser->>Entra: Authorize with Entra ID
    Note over Browser: User authenticates with Entra ID
    Entra->>APIM: Callback with authorization code
    
    Note over APIM: Validate state correlation
Exchange code for Entra access token
Generate encrypted session token
    APIM->>Browser: Redirect with MCP authorization code

    Note over Client,Graph: 3. Token Exchange
    Browser->>APIM: POST /token (code + code_verifier)
    Note over APIM: Validate PKCE challenge
Return encrypted session token
    APIM->>Browser: Access token (encrypted session key)
    Browser->>Client: Token for MCP communication

    Note over Client,Graph: 4. Authenticated MCP Communication
    Client->>APIM: GET /mcp/sse (with Bearer token)
    Note over APIM: Decrypt session token
Lookup cached Entra token
Add to request for downstream
    APIM->>Function: Forward with Entra access token
    
    Function->>Graph: API calls using on-behalf-of flow
    Graph->>Function: User data
    Function->>APIM: MCP response
    APIM->>Client: Authenticated MCP response

使用的安全功能和Cookie

此实现使用多种安全机制和Cookie来确保安全流:

Cookie目的
__Host-MCP_APPROVED_CLIENTS记住特定客户的用户同意
__Host-MCP_DENIED_CLIENTS记住拒绝同意以防止再次提示
__Host-MCP_CONSENT_STATE验证提交的同意书
__Host-MCP_ENTRA_STATE将Entra ID回调与原始请求相关联
__Host-MCP_CSRF_TOKEN保护同意书免受CSRF攻击
\[!注意\] 所有Cookie的使用 __Host- 前缀、安全、HttpOnly和SameSite=Lax用于最大安全性(除 __Host-MCP_ENTRA_STATE 其使用SameSite=None进行跨站点重定向)。

主要安全功能:

  • 🔐 PKCE(代码交换证明密钥) -防止授权码被拦截
  • 🍪 安全Cookie -所有Cookie的使用 __Host- 最大安全性前缀
  • 🛡️ CSRF保护 -具有恒定时间验证的双重提交cookie模式
  • 🔄 状态相关性 -多层状态验证可防止会话固定
  • 🔒 加密会话令牌 -会话标识符经过AES加密
  • 令牌缓存 -Entra令牌缓存有加密的会话密钥以提高性能

入门

按照以下步骤开始。

  1. 安装Azure开发者命令行界面.
  1. 在本地克隆存储库:
   git clone https://github.com/localden/remote-auth-mcp-apim-py
  1. 导航到终端中的存储库:
   cd remote-auth-mcp-apim-py
  1. 确保 Microsoft.App 资源提供程序已在您的订阅上注册 Azure门户 或运行以下命令 Azure CLI命令:
   az login
   az provider register --namespace Microsoft.App --wait
  1. 登录Azure开发者命令行界面:
   azd auth login
  1. 将项目部署到Azure:
   azd up
\[!重要\] 部署此项目将产生Azure成本。如果部署用于测试和实验,请确保在测试后删除创建的资源组。

部署和测试项目

当你奔跑时 azd up,在 infra 目录将在您的Azure帐户中设置。您可以浏览现有的二头肌文件,了解将自动部署哪些基础设施。

GIF showing the deployment of Azure resources with Azure Developer CLI

部署完成后,您将看到 端点 打印在终端上:

Endpoint in the terminal

例如,在上面的屏幕截图中,端点是 https://apim-2lzunaz2nu642.azure-api.net/mcp/sse。复制它。

\[!注意\] 在下一步之前,请确保您已 已安装-需要运行 模型上下文协议检查器.

在您的终端中,运行:

npx @modelcontextprotocol/inspector@0.9.0
\[!注意\] 我们正在使用 0.9.0 发布模型上下文协议检查器,因为它是测试受保护的MCP服务器时最稳定的版本。

这将提供一个端点,您可以在其中看到模型上下文协议检查器在本地运行。在浏览器中打开URL。

切换 传输类型上海证券交易所 并设置 统一资源定位符 到您从运行部署中获得的端点。点击 连接.

Authenticating in the MCP Inspector

系统将提示您使用凭据进行身份验证 在部署基础架构的租户中Entra ID应用程序在部署时动态注册,一个用于服务器,另一个将用于 代表流量 获取 微软图形 访问。

一旦您同意,您将返回模型上下文协议检查器登录页面。等待几秒钟,直到建立连接-您将看到一个绿色 连接 标签在页面上。

Connected MCP server in MCP Inspector

连接后,单击 列出工具 并选择 get_graph_user_details。这将使您能够从Microsoft Graph获取有关当前已验证用户的数据。点击 运行工具.

List tools in MCP Inspector and trigger the one that returns user details from Graph

如果一切顺利,您将在响应块中看到您的用户数据,如下所示:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  "businessPhones": [],
  "displayName": "YOUR_NAME",
  "givenName": null,
  "jobTitle": null,
  "mail": "YOUR_EMAIL",
  "mobilePhone": null,
  "officeLocation": null,
  "preferredLanguage": null,
  "surname": null,
  "userPrincipalName": "YOUR_UPN",
  "id": "c6b77314-c0ec-44b2-b0bb-2c971a753f0c",
  "success": true
}

反馈和报告问题

确保 打开一个问题 如果你遇到任何障碍或有意见。

目录标签

目录标签

BicepJavaScriptAPI集成cloud-platforms本地部署AzureFunctionsAPI管理OAuth2.0PKCE动态客户端注册

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

@modelcontextprotocol/inspector@0.9.0

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP