使用说明
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用于请求验证
入门指南
-
安装依赖项
npm install -
复制配置
cp .env.example .env更新环境值。默认情况下,假设身份验证服务器可以在以下位置访问
http://localhost:4000您的MCP资源服务器是https://example.com/mcp. -
在开发中运行
npm run dev服务器在端口上启动
4000(可通过以下方式配置PORT). -
为生产而建
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工具端点。 |
多应用身份策略
- 用户注册一次;电子邮件地址在您发布的每个应用程序中都是唯一的。
- 每个应用程序都由一个规范表示
resourceURI(例如。,https://your-domain.com/mcp/sales). - 动态客户端注册可以指定关联的
resource代币是通过以下方式铸造的aud设置为该资源,以便在保持共享的同时区分应用程序级别的权限sub. - 访问令牌携带
scope,email,azp(授权方/客户id)和标准OIDC声明。您可以通过额外的声明来丰富它们,以传播购买层或组织成员资格。
开发您的应用程序
- 将您的MCP服务器托管在OAuth中间件后面,该中间件验证此身份验证服务器返回的JWT访问令牌。
- 确保每个MCP服务器都公开
/.well-known/oauth-protected-resource指向 这 auth-server(您可以在资源服务器前代理控制器,也可以从这里提供JSON)。 - 在每个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验证令牌/代码生命周期规则(例如,无代码重用、刷新撤销)。
许可证
麻省理工学院
