MCP OAuth合规性测试仪
用于测试MCP服务器OAuth是否符合RFC 9728、RFC 8414、RFC 7591、RFC 9068、RFC 7519、RFC 7515、OAuth 2.1和 MCP 2025-11-25规范.
✨ 新:现在支持2025-11-25之前和 MCP 2025-11-25 协议版本!
GitHub存储库: https://github.com/gazzadownunder/MCP-OAuth-Compliance
快速开始
npm install
npm start打开 http://localhost:3456 在您的浏览器中。
全局安装(CLI)
全局安装以用作命令行工具:
npm install -g .
mcp-oauth-compliance或者直接从GitHub安装:
npm install -g github:gazzadownunder/mcp-oauth-compliance
mcp-oauth-compliance或者直接通过npx运行:
npx github:gazzadownunder/mcp-oauth-complianceCLI选项
mcp-oauth-compliance [options]
Options:
-p, --port Server port (default: 3001, or PORT env var)
-h, --help Show help message示例:
mcp-oauth-compliance --port 3000
mcp-oauth-compliance -p 9000
PORT=4000 mcp-oauth-compliance协议版本支持
此合规性测试仪支持传统和更新的MCP授权协议:
2025-11-25之前(原始MCP OAuth)
支持标准DCR和OAuth流的原始MCP OAuth规范。
支持的功能:
- RFC 7591动态客户端注册(DCR)
- 可选的PKCE(S256或普通方法)
- 标准OAuth 2.0/2.1授权流程
- JWT访问令牌验证
- 通过DCR或预注册进行客户注册
MCP 2025-11-25(增强型安全)🆕
增强了规范,提高了安全性和新功能。
新要求:
- ✅ S256 PKCE(必填):强制S256代码挑战方法,不鼓励
- ✅ 客户端ID元数据文档:HTTPS URL作为客户端标识符,带有托管元数据
- ✅ 资源参数(RFC 8707):授权/令牌请求中的资源指示符
- ✅ 令牌受众验证:严格的JWT
aud索赔核实 - ✅ 升级授权:手柄
insufficient_scope具有重新授权流程 - ✅ 私钥JWT:增强的客户端身份验证选项
客户注册优先级(MCP 2025-11-25):
- 预注册 (优先级1)-使用现有的客户端凭据(如果可用)
- 客户端ID元数据文档 (优先级2)-HTTPS URL作为客户端id
- 动态客户端注册 (优先级3)-RFC 7591回退
选择协议版本
在web界面中,从下拉列表中选择所需的协议版本:
- 2025年前-25:使用原始规范测试服务器
- MCP 2025-11-25:执行最新规范的测试服务器
测试人员会根据您的选择自动调整验证规则和测试覆盖率。
特性
核心功能
- web界面:带有可折叠测试部分的交互式合规性测试仪表板
- 双协议支持:根据2025-11-25或MCP 2025-11-25规范进行测试
- 综合测试:RFC 9728(受保护的资源元数据)、RFC 8414(AS发现)、RFC 7591(DCR)、OAuth 2.1
- HTTPS验证:根据OAuth要求进行传输安全检查
- 多种发现方法:标准RFC 8414+OIDC发现
- 预配置的客户端模式:使用现有OAuth客户端进行测试(绕过DCR)
- 交互式OAuth流:基于浏览器的PKCE授权
- 智能端口选择:自动避开服务器的端口并找到可用的回调端口(最多20次尝试)
- 增强调试模式:完整的HTTP请求/响应捕获,带有可扩展的UI部分,用于故障排除
- RFC 7592验证:验证
registration_client_uri具有相对URL自动校正功能的格式 - 持久UI状态:使用localStorage在测试运行中保存节折叠/展开首选项
配置选项
| 选项 | 描述 | 协议 |
|---|---|---|
| 协议版本 | 选择2025-11-25之前或MCP 2025-11-25 | 两者都有 |
| 跳过DCR测试 | 绕过动态客户端注册测试 | 两者都有 |
| 跳过OAuth流 | 跳过令牌获取测试 | 两者都有 |
| 交互式身份验证 | 启用基于浏览器的OAuth流 | 两者都有 |
| 预配置客户端 | 使用现有的客户端凭据而不是DCR | 两者都有 |
| 回拨端口 | OAuth回调端口(默认值:3000)。自动查找下一个可用端口 | 两者都有 |
| 重定向URI | 在您的IDP中注册了完整的重定向URI | 两者都有 |
| 资源uri | RFC 8707的资源指示符(2025-11-25需要) | 两者都有 |
| 特权工具名称 | 范围挑战测试的工具名称(可选,用于步骤1.5) | 2025-11-25 |
| 客户端ID元数据URL | 客户端ID元数据文档的HTTPS URL | 2025-11-25 |
| 客户端ID/密码 | 预配置的客户端凭据 | 两者都有 |
| 范围 | OAuth请求范围 | 两者都有 |
| 启用调试 | 捕获并显示所有服务器交互的HTTP请求/响应数据 | 两者都有 |
测试类别
2025-11-25前协议
1.受保护资源元数据(RFC 9728)
- HTTPS传输验证
- 众所周知的端点发现
- WWW身份验证标头解析
- 授权服务器引用验证
2.授权服务器发现(RFC 8414)
- HTTPS传输验证
- 标准和OIDC发现
- 必需的端点验证
- PKCE支持检测
3.客户注册
- 预注册:验证现有客户端凭据
- 动态客户端注册(RFC 7591/7592):客户注册各种补助类型
- 响应验证(HTTP 201、client_id等) - 客户端管理URI验证(RFC 7592) - 自动更正返回相对URL的服务器
4.OAuth 2.1流程
- PKCE要求(S256或普通)
- 授权码流
- 令牌交换验证
5.JWT访问令牌验证(RFC 9068)
- 令牌结构和编码
- 所需索赔(iss、sub、exp、iat)
- 根据AS元数据验证发卡机构
- JWKS端点和密钥验证
6.受保护的资源访问
- 承载令牌身份验证
- 访问令牌验证
MCP 2025-11-25协议(附加测试)🆕
7.PKCE S256的执行
- S256方法是必需的(非可选)
- 简单方法不鼓励警告
- 代码挑战验证
8.资源参数(RFC 8707)
- 授权请求中的资源参数
- 令牌请求中的资源参数
- 令牌响应中的资源验证
- JWT资源声明验证
9.令牌受众验证
- JWT
aud索赔存在 - 受众与资源参数匹配
- 多受众支持
- 防止令牌传递攻击
10.加强授权
- 范围错误检测不足
- 从错误响应中解析所需的作用域
- 范围扩大的重新授权
- 重试限制执行
- 范围挑战测试(可选):使用特权工具测试完整流程
11.私钥JWT认证
- JWKS配置验证
- JWT断言创建
- 令牌端点身份验证
- 签名验证
文档
发展
npm run build # Compile TypeScript
npm test # Run unit tests
npm run lint # Check code style
npm run type-check # Type validationTLS版本支持
合规性测试仪支持用于安全HTTPS连接的现代TLS协议:
- TLS 1.3 ✅ (首选-最新和最安全)
- TLS 1.2 ✅ (支持的最低版本)
- TLS 1.1及以下版本 ❌ (出于安全原因不支持)
由Node.js v22.14.0和OpenSSL 3.0.15+quic提供支持。
证书处理
默认情况下,合规性测试仪允许自签名证书 以促进测试和开发。证书警告会自动跟踪并显示在测试结果中,同时提供补救建议。
跟踪的证书警告:
- ⚠️ 自签名证书
- ⚠️ 过期证书
- ⚠️ 尚未生效的证书
- ⚠️ 主机名不匹配
- ⚠️ 不受信任的CA链
所有警告包括:
- 证书详细信息(颁发者、主体、有效期)
- 对问题的清晰描述
- 建议采取的解决行动
环境变量
DEBUG_CERTS:为HTTPS请求启用详细的证书验证调试
- 吃起来 true 或 1 启用 - 显示证书详细信息(主题、颁发者、有效日期、指纹、TLS版本) - 显示常见证书问题的详细错误消息 - 为证书问题提供补救建议 - 例子: DEBUG_CERTS=true npm start
NODE_TLS_REJECT_UNAUTHORIZED:强制执行严格的TLS证书验证
- 违约: 0 (允许带有警告的自签名证书) - 吃起来 1 强制执行严格的证书验证(将拒绝自签名证书) - 例子: NODE_TLS_REJECT_UNAUTHORIZED=1 npm start
项目结构
src/compliance/-合规性测试仪实施src/client/-DCR客户端库src/validation/-RFC 7591验证器src/types/-TypeScript定义public/-Web界面
