Mcp_oauth_server

Mcp_oauth_server

🚀 实现可流式 HTTP 服务器与客户端的 OAuth 支持(无需 PKCE)

本项目实现了可流式 HTTP 服务器与客户端的 OAuth 支持,无需使用 PKCE 技术。通过设备流程,为服务器和客户端提供了安全、便捷的 OAuth 认证方式。

🚀 快速开始

克隆仓库并安装依赖

git clone <仓库地址>
cd <仓库目录>
npm install

创建 OAuth 应用

转到您的 GitHub 开发者设置(在设置下),创建一个 OAuth 应用。输入“http://localhost”作为回调 URL(如果需要)。确保启用“设备流”,并记录下客户端 ID 和客户端密钥。

设置环境变量

在本地开发环境中设置 GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET 环境变量。

启动服务器

npx tsx server/index_streamable.ts

启动客户端

在另一个终端中启动 MCP 客户端。

npx tsx client/client.ts

✨ 主要特性

  • 可流式 HTTP 服务器:具备 OAuth 支持,通过设备流程实现认证。
  • 可流式 HTTP 客户端:以无头模式运行,支持 OAuth 认证。

📚 详细文档

OAuth 支持

在撰写本文时,使用 MCP Inspector 测试具备 OAuth 支持的可流式 HTTP 服务器遇到了困难,因此选择通过设备流程实现 OAuth。

典型基于浏览器的身份验证流程

  1. 客户端请求连接:MCP 客户端请求与 MCP 服务器建立连接。
  2. 服务器授权:服务器通过 GitHubAuthProvider 授权客户端(重定向到 GitHub);一旦用户授权所需的范围,服务器的回调处理程序:
    • 从 GitHub 获取访问令牌,然后获取用户数据。
    • 在其令牌存储中存储访问令牌和新的会话令牌。
    • 为客户端生成临时授权码,并与新生成的会话令牌一起保存。
    • 将临时授权码重定向回客户端。
  3. 客户端换取会话令牌:客户端使用临时授权码换取会话令牌,用于后续请求。

基于设备的 OAuth 流程

希望将基于浏览器的身份验证流程替换为基于设备的 OAuth 流程,该流程无需 PKCE,原因如下:

  • 无需重定向或客户端代码处理。
  • 设备代码流本质上更安全:
    • 用户打开 URL 并在 GitHub 页面上直接输入代码。
    • 所有令牌交换都是服务器对服务器进行的。
    • 设备代码本身短暂且只能由请求它的同一客户端(我们的服务器)使用。
    • 只有用户代码从服务器传递到客户端。

尽管没有浏览器用于会话存储,但可能仍需实现 MCP's OAuthServerProvider 目前需要的一些方法(例如 exchangeAuthorizationCodechallengeForAuthorizationCode)。

  • 0 关注
  • 0 收藏,11 浏览
  • system 提出于 2025-09-30 17:24

相似服务问题