OAuth授权服务器

一个符合OpenAI Apps SDK要求的OAuth 2.1授权服务器,提供动态客户端注册、令牌验证和统一用户注册功能。

  • by kuntu-tech
  • HTML
  • 本地部署
  • 更新于
在 GitHub 查看 kuntu-tech/mcp-oauth-server

使用说明

OpenAI应用兼容身份验证服务器

此项目实现了一个满足以下要求的OAuth 2.1授权服务器 模型上下文协议 OpenAI Apps SDK使用的(MCP)授权要求。它提供:

  • OAuth 2.1授权码+PKCE流程
  • OAuth 2.0动态客户端注册(/oauth/register)
  • RFC 9728受保护的资源元数据(/.well-known/oauth-protected-resource)
  • RFC 8414/OIDC发现文档(/.well-known/openid-configuration)
  • 用于令牌验证的JWKS端点(/oauth/jwks)
  • 共享用户注册表,在所有应用程序中具有电子邮件唯一性
  • 访问+刷新令牌(用RS256签名的JWT访问令牌)
  • 最小用户门户(登录、注册、同意)

代币嵌入 sub 和 email,允许您在多个已发布的应用程序之间保持统一的身份,同时限制每个资源的访问(aud)以及范围。


堆栈

  • Node.js+TypeScript
  • 快递+快递环节
  • JWT/JWKS的工作
  • Zod用于请求验证

入门指南

  1. 安装依赖项

    npm install
    
  2. 复制配置

    cp .env.example .env
    

    更新环境值。默认情况下,假设身份验证服务器可以在以下位置访问 http://localhost:4000 您的MCP资源服务器是 https://example.com/mcp.

  3. 在开发中运行

    npm run dev
    

    服务器在端口上启动 4000 (可通过以下方式配置 PORT).

  4. 为生产而建

    npm run build
    npm start
    

关键终点

端点 描述
/.well-known/oauth-protected-resource RFC 9728保护指向此授权服务器的资源元数据。
/.well-known/openid-configuration RFC 8414(OIDC)发现文档。
/oauth/jwks JWKS设置用于RS256访问/id令牌验证。
/oauth/register 动态客户端注册(POST)。
/oauth/authorize 授权码+PKCE入口点(GET)。
/oauth/token 令牌端点(authorization_code+refresh_Token)。
/oauth/userinfo 已验证令牌的基本配置文件电子邮件查找。
/mcp/ping 示例受OAuth保护的MCP工具端点。

多应用身份策略

  • 用户注册一次;电子邮件地址在您发布的每个应用程序中都是唯一的。
  • 每个应用程序都由一个规范表示 resource URI(例如。, https://your-domain.com/mcp/sales).
  • 动态客户端注册可以指定关联的 resource代币是通过以下方式铸造的 aud 设置为该资源,以便在保持共享的同时区分应用程序级别的权限 sub.
  • 访问令牌携带 scope, email, azp (授权方/客户id)和标准OIDC声明。您可以通过额外的声明来丰富它们,以传播购买层或组织成员资格。

开发您的应用程序

  1. 将您的MCP服务器托管在OAuth中间件后面,该中间件验证此身份验证服务器返回的JWT访问令牌。
  2. 确保每个MCP服务器都公开 /.well-known/oauth-protected-resource 指向 这 auth-server(您可以在资源服务器前代理控制器,也可以从这里提供JSON)。
  3. 在每个OpenAI App中,使用Apps SDK配置资源URL和所需作用域(例如。, AuthSettings 在FastMCP中)。一旦ChatGPT连接,它将:
    • 检索受保护的资源元数据
    • 动态注册客户端
    • 启动用户的授权流程
    • 交换代币并调用您的工具 Authorization: Bearer …

定制化

  • 数据库:swap suebase
  • 代币:调整范围、TTL或索赔 src/config.ts 和 src/tokens.ts.
  • 同意用户体验:更新中的HTML模板 src/index.ts 以匹配您的品牌并添加购买/升级提示。
  • 管理工具:使用经过身份验证的仪表板或CLI扩展客户端注册,以发布长期机密客户端(例如,用于服务到服务连接器)。

安全说明

  • 更换dev SESSION_SECRET 并将会话存储在生产环境中的持久后端(Redis、数据库)中。
  • 通过替换来旋转签名密钥 data/jwks.json;客户会买新的 kid 通过JWKS端点。
  • 在生产环境中强制使用HTTPS,并配置反向代理(例如Nginx)以终止TLS。
  • 考虑登录端点的多因素身份验证和速率限制。

测试思路

  • 使用以下工具 钥匙斗篷 或者您自己的资源服务器,以根据JWKS端点验证令牌。
  • 创建集成测试,使用无头浏览器(Playwright)模拟ChatGPT OAuth提示,遍历完整的PKCE流程。
  • 在周围添加单元测试 src/store.ts 验证令牌/代码生命周期规则(例如,无代码重用、刷新撤销)。

许可证

麻省理工学院