MCP服务器认证工具

一个演示如何创建需要OAuth 2.0认证的MCP服务器的示例,提供受JWT令牌保护的数学工具。

  • by alefcarlos
  • Jupyter Notebook
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 alefcarlos/mcpserver-auth-demo

使用说明

受保护的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 run

OAuth服务器将在以下时间启动 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

可用工具

服务器提供需要身份验证的数学工具:

  1. 添加:添加两个数字
  • 参数: a (双倍), b (双)
  • 例子: Add 随着 a: 2.5, b: 4.25 回报 6.75
  1. 乘:将两个数字相乘
  • 参数: 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工具直接测试服务器:

  1. 从OAuth服务器获取访问令牌
  2. 将令牌包含在 Authorization: Bearer <token> 头球
  3. 向MCP端点发出请求

外部依赖项

数学工具没有外部数据依赖关系。

故障排除

  • 确保ASP。NET Core开发证书是受信任的。

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust
    
  • 验证受信任的主机以进行动态客户端注册。

Realm完全导出

确保Keycloak容器已停止,并运行以下命令导出领域配置:

docker run --rm --volumes-from <container> quay.io/keycloak/keycloak:latest export --realm local --file /opt/keycloak/data/export.json --users same_file
docker cp <container>:/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