使用说明

项目简介

本仓库 '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' 为例说明安装步骤:

  1. 克隆仓库:

    git clone https://github.com/Azure-Samples/mcp-auth-servers.git
    cd mcp-auth-servers/src/github-app-session
  2. 安装依赖:

    npm install
  3. 配置环境变量: 复制 '.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')。

  4. 运行服务器:

    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') 的配置类似,只需调整入口文件路径和环境变量。

基本使用方法

  1. 启动 MCP 服务器 (按照上述安装步骤)。
  2. 启动 MCP 客户端,并配置连接到运行中的 MCP 服务器。
  3. 客户端发起连接: 客户端会尝试连接到 MCP 服务器。
  4. 身份验证 (如果需要): 如果服务器配置了身份验证 (如本示例),客户端需要先进行 OAuth 2.0 授权流程。
    • 客户端会重定向到 GitHub 授权页面 (对于 'github-app-session' 示例)。
    • 用户在 GitHub 授权后,会重定向回客户端,并完成授权。
  5. 调用 MCP 功能: 客户端成功连接并完成身份验证后,可以调用 MCP 服务器提供的工具 (如 'getUserDetails') 和访问资源。

例如,使用 MCP 客户端调用 'getUserDetails' 工具的流程:

  • 客户端发送 'ListToolsRequest' 获取可用工具列表。
  • 客户端选择 'getUserDetails' 工具,并发送 'CallToolRequest'。
  • 服务器验证客户端身份,调用 GitHub API 获取用户信息。
  • 服务器返回 'CallToolResponse',包含用户详细信息。

请参考每个示例目录下的 README 文件获取更详细的示例特定使用说明。

信息

分类

开发者工具