受保护的MCP服务器示例
此示例演示了如何创建需要OAuth 2.0身份验证才能访问其工具和资源的MCP服务器。服务器提供由JWT承载令牌身份验证保护的简单数学工具(加法和乘法)。
概述
受保护的MCP服务器示例显示了如何:
- 创建具有OAuth 2.0保护的MCP服务器
- 配置JWT承载令牌身份验证
- 实施受保护的MCP工具和资源
- 与ASP集成。NET Core身份验证和授权
- 为客户端发现提供OAuth资源元数据
先决条件
- .NET 10.0或更高版本
设置和运行
用户
*电子邮件*: alef@alef.com *密码*: 123
第一步:启动Aspire Host项目
首先,您需要使用aspire启动所有deps:
aspire runOAuth服务器将在以下时间启动 http://localhost:8080 服务器将在 http://localhost:5522
mcp的vscode客户端尚不支持使用自签名证书的https,因此您需要使用http端点进行测试。 #248170
步骤2:使用vscode测试服务器
跟随 本指南 使用Visual Studio代码测试服务器
步骤2.1:使用MCP检查器测试服务器
访问 http://localhost:6274/ 并遵循 Guided OAuth Flow
步骤2.2:使用手动流程笔记本测试服务器
文件 manual-flow.ipynb 包含一个Jupyter笔记本,演示如何从OAuth服务器手动获取访问令牌,并使用它访问受保护的MCP服务器端点。
服务器提供什么
保护资源
- MCP端点:
http://localhost:5522/(需要身份验证) - OAuth资源元数据:
http://localhost:5522/.well-known/oauth-protected-resource
可用工具
服务器提供需要身份验证的数学工具:
- 添加:添加两个数字
- 参数:
a(双倍),b(双) - 例子:
Add随着a: 2.5, b: 4.25回报6.75
- 乘:将两个数字相乘
- 参数:
a(双倍),b(双) - 例子:
Multiply随着a: 3, b: 5回报15
验证配置
服务器配置为:
- 接受来自OAuth服务器的JWT承载令牌
https://localhost:8080 - 将令牌受众验证为
apiservice - 要求令牌具有适当的作用域(
mcp:tools,profile) - 为客户端发现提供OAuth资源元数据
建筑
服务器使用:
- ASP。NET核心 用于托管和HTTP处理
- JWT承载身份验证 用于令牌验证
- MCP身份验证扩展 用于OAuth资源元数据
- 简单的进程内逻辑 用于数学运算
- 授权 保护MCP端点
OAuth服务器
此演示使用 Keycloak 26 实现 RFC 8414 和 RFC 7591 这是MCP OAuth资源元数据所必需的。
配置详情
- 服务器URL:
http://localhost:5522 - OAuth服务器:
http://localhost:8080 - MCP检查员:
http://localhost:6274
无客户端测试
您可以使用HTTP工具直接测试服务器:
- 从OAuth服务器获取访问令牌
- 将令牌包含在
Authorization: Bearer头球 - 向MCP端点发出请求
外部依赖项
数学工具没有外部数据依赖关系。
故障排除
- 确保ASP。NET Core开发证书是受信任的。
dotnet dev-certs https --clean
dotnet dev-certs https --trust- 验证受信任的主机以进行动态客户端注册。
Realm完全导出
确保Keycloak容器已停止,并运行以下命令导出领域配置:
docker run --rm --volumes-from quay.io/keycloak/keycloak:latest export --realm local --file /opt/keycloak/data/export.json --users same_file
docker cp :/opt/keycloak/data/export.json .参考文献
- https://github.com/localden/min-cs-mcp-auth/tree/main
- https://github.com/modelcontextprotocol/csharp-sdk
- https://github.com/mikekistler/mcp-auth-illustrated/blob/main/github.ipynb
- https://www.youtube.com/watch?v=H0SGK1yPHD0
- https://modelcontextprotocol.io/docs/tutorials/security/authorization
- https://www.keycloak.org/2025/09/keycloak-2640-released
- https://modelcontextprotocol.io/specification/draft/basic/authorization
