受保护的MCP服务器演示
ASP。NET Core实现的模型上下文协议(MCP)服务器,使用Azure Entra ID(Active Directory)进行安全保护。该项目演示了如何通过MCP向LLM公开功能(简单的数学工具),同时实施企业级安全和基于角色的访问控制(RBAC)。
此工具的目的是演示两件事:
- 如何使用Azure AD/Entra ID保护MCP服务器。
- 如何为MCP服务器公开的不同工具实现基于角色的访问控制(RBAC)。
特性
- 模型上下文协议实现:使用标准化的MCP规范将工具暴露给AI助手。
- 工具:包括基本的数学运算(
Add,Subtract,Multiply,Divide). - 缺省巩固安全:
- 受Azure Entra ID(OAuth2/OpenID连接)保护。 - 使用JWT承载令牌身份验证。 - 在每个工具的基础上实现粒度RBAC(基于角色的访问控制)。
先决条件
- .NET SDK:版本10.0(或兼容的预览版/标准版)。
- Azure帐户:用于创建应用程序注册和部署Web应用程序。
- Azure命令行界面:用于部署脚本。
- MCP客户端:能够连接到支持身份验证凭据的MCP服务器的客户端。此代码使用VS code作为授权的MCP客户端。
入门指南
1.Azure安装程序(Entra ID)
您需要在Azure Entra ID租户中注册一个应用程序来处理身份验证。
- 创建应用程序注册:
- 转到Azure门户>Microsoft Entra ID>应用程序注册。 - 新注册>命名它(例如,“受保护的MCP服务器”)。 - 对于帐户类型,请选择 Accounts in this organizational directory only (Single Tenant). - 对于重定向URI,请从以下内容开始 http://localhost:5284。如果您已经在Azure中部署了web应用程序,请在创建后稍后在重定向URI部分添加其URL。 - 记下 这 Application (client) ID 和 Directory (tenant) ID。稍后需要。
- 定义应用程序角色:
- 在应用程序注册刀片中,转到 应用程序角色.
- 创建以下角色(将允许的成员类型设置为 用户/组):
| 显示名称 | 值 | 描述 | 允许的成员类型 |
|---|---|---|---|
| 添加工具用户 | add-tool-user | 此角色的用户将能够调用“添加”工具。 | 用户/组 |
| 减法工具用户 | subtract-tool-user | 此角色的用户将能够调用“减法”工具。 | 用户/组 |
| 乘法工具用户 | multiply-tool-user | 此角色的用户将能够调用“乘法”工具。 | 用户/组 |
| 分割工具用户 | divide-tool-user | 此角色的用户将能够调用“Divide”工具。 | 用户/组 |
- 公开API:
- 应用内注册> 公开API. - 设置 应用程序ID URI (例如。, api://). - 添加作用域: - 点击 添加作用域. - 作用域名称: access_as_user. - 谁可以同意?: 管理员和用户. - 输入有效的显示名称和描述。 - 确保状态为 启用 然后单击 添加范围. - 授权客户端应用程序: - 点击 添加客户端应用程序. - 输入 VS Code 客户端ID: aebc6443-996d-45c2-90f0-388ff96faa56. - 选择授权的作用域以允许VS Code为您的API请求令牌。
- 指派角色:
- 首选 企业应用程序 (搜索您的应用程序名称)。 - 首选 用户和组 > 添加用户/组 >选择用户>选择适当的角色。 - *注意:只有具有指定角色的用户才能成功调用相应的工具。*
2.配置
更新 appsettings.json 在 ProtectedMcpServerDemo 或者使用环境变量。
应用程序参数:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "your-tenant.onmicrosoft.com",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id"
},
"ApiEndpoint": "https://your-app-url.azurewebsites.net" or "http://localhost:5284"
}3.地方发展
cd ProtectedMcpServerDemo
dotnet run服务器将启动(通常检查控制台端口 http://localhost:5284 或 https://localhost:7017).
4.在VS代码中使用MCP服务器
- 打开VS代码。
- 创建一个名为的文件
mcp.json内部.vscode项目文件夹中的目录。您可能需要创建.vscode文件夹(如果不存在)。
- 将以下内容复制到
mcp.json文件:
{
"servers": {
"My Math MCP Server": {
"type": "http",
"url": "http://localhost:5284"
}
}
}- 启动MCP服务器。VS Code将提示您登录。使用您的工作/学校帐户登录。
- 打开GitHub Copilot聊天。从工具中选择“我的数学MCP服务器”,然后开始问与数学相关的问题。例如,你可以问这样的问题
what is 5 times 2 minus 7.
5.部署到Azure
部署脚本 deploy.sh 为Azure Web应用程序提供。
- 请确保您已登录到Azure:
az login- 编辑
ProtectedMcpServerDemo/deploy.sh并更新Configuration顶部的变量(资源组、应用程序名称)和Azure AD Configuration部分。 - 运行脚本:
cd ProtectedMcpServerDemo
chmod +x deploy.sh
./deploy.sh- 部署成功后,进行更改
url在你的mcp.json连接到在Azure中运行的MCP服务器。
用法
要使用此服务器,您的MCP客户端必须在 Authorization 连接到MCP端点时的标头。
- MCP端点:
https://.azurewebsites.net - 运输:HTTP/SSE
授权流程
- 客户端从Azure AD获取资源的访问令牌
api://. - 客户端连接到MCP服务器端点,提供令牌:
Authorization: Bearer
- 当工具(例如。,
Add)服务器检查令牌是否包含所需的角色声明(例如。,add-tool-user). - 如果获得授权,该工具将执行;否则,访问将被拒绝。
项目结构
- 程序cs:配置web主机、JWT身份验证和MCP服务。
- 工具/数学工具:定义MCP工具并应用
[Authorize(Roles = "...")]属性来强制执行权限。 - deploy.sh:用于构建、打包应用程序并将其部署到Azure Web Apps的脚本。
