使用说明
项目简介
本仓库 'mcp-auth-servers' 旨在为开发者提供 Model Context Protocol (MCP) 服务器身份验证的参考实现。它演示了如何在不同的场景下,例如本地和远程服务器,以及使用不同的身份提供商(如Entra ID和GitHub)来保护MCP服务器。请注意,仓库中的代码仅为演示目的,生产环境使用前务必进行安全审计和威胁建模。
主要功能点
- 多种身份验证场景: 演示了远程、本地和双用途MCP服务器的身份验证方案。
- 支持多种身份提供商: 提供了 Entra ID 和 GitHub 的身份验证集成示例。
- OAuth 2.0 授权流程: 实现了基于 OAuth 2.0 协议的授权码流程,用于客户端身份验证和授权。
- 会话管理: 使用 Session Token 管理用户会话,增强安全性。
- 工具调用安全: 通过身份验证中间件 'requireBearerAuth' 保护 MCP 工具接口,确保只有授权用户可以调用。
- 动态客户端注册 (部分支持): 部分示例中支持动态客户端注册,允许客户端自行注册并获取访问权限。
安装步骤
由于本仓库是参考实现集合,每个子目录都是一个独立的服务器示例。以下以 'github-app-session' 为例说明安装步骤:
-
克隆仓库:
git clone https://github.com/Azure-Samples/mcp-auth-servers.git cd mcp-auth-servers/src/github-app-session -
安装依赖:
npm install -
配置环境变量: 复制 '.env.example' 文件并重命名为 '.env',根据你的 GitHub 应用程序配置填写以下环境变量:
GITHUB_CLIENT_ID=<你的 GitHub App Client ID> GITHUB_CLIENT_SECRET=<你的 GitHub App Client Secret>你需要在 GitHub 开发者设置中创建一个 OAuth App 并获取 Client ID 和 Client Secret。 回调 URL (Authorization callback URL) 需要设置为 'http://localhost:3001/auth/callback' (或者你运行服务器的地址和端口 + '/auth/callback')。
-
运行服务器:
npm run start服务器默认会在 'http://localhost:3001' 启动。
服务器配置
MCP 客户端需要配置服务器的启动命令和参数才能连接。对于 'github-app-session' 示例,配置信息如下:
{ "serverName": "github-auth-server", "command": "node", "args": ["dist/Server.js"], "transport": "sse", "baseUrl": "http://localhost:3001" }
参数说明:
- 'serverName': 服务器名称,可以自定义。
- 'command': 启动服务器的命令,这里使用 'node' 运行 JavaScript 代码。
- 'args': 命令参数,'dist/Server.js' 是编译后的服务器入口文件路径。
- 'transport': 传输协议,这里使用 'sse' (Server-Sent Events)。
- 'baseUrl': 服务器的基础 URL,默认为 'http://localhost:3001'。
注意:
- 确保 MCP 客户端能够访问到 'baseUrl' 指定的地址和端口。
- 实际部署时,'baseUrl' 需要更改为服务器的公网可访问地址。
- 其他示例 (例如 'entra-id-cca-session', 'entra-id-local-wam') 的配置类似,只需调整入口文件路径和环境变量。
基本使用方法
- 启动 MCP 服务器 (按照上述安装步骤)。
- 启动 MCP 客户端,并配置连接到运行中的 MCP 服务器。
- 客户端发起连接: 客户端会尝试连接到 MCP 服务器。
- 身份验证 (如果需要): 如果服务器配置了身份验证 (如本示例),客户端需要先进行 OAuth 2.0 授权流程。
- 客户端会重定向到 GitHub 授权页面 (对于 'github-app-session' 示例)。
- 用户在 GitHub 授权后,会重定向回客户端,并完成授权。
- 调用 MCP 功能: 客户端成功连接并完成身份验证后,可以调用 MCP 服务器提供的工具 (如 'getUserDetails') 和访问资源。
例如,使用 MCP 客户端调用 'getUserDetails' 工具的流程:
- 客户端发送 'ListToolsRequest' 获取可用工具列表。
- 客户端选择 'getUserDetails' 工具,并发送 'CallToolRequest'。
- 服务器验证客户端身份,调用 GitHub API 获取用户信息。
- 服务器返回 'CallToolResponse',包含用户详细信息。
请参考每个示例目录下的 README 文件获取更详细的示例特定使用说明。
信息
分类
开发者工具