OAuth合规测试工具

基于Web的工具,用于测试MCP服务器OAuth合规性,支持RFC 9728、RFC 8414、RFC 7591、RFC 9068、RFC 7519、RFC 7515、OAuth 2.1和MCP 2025-11-25规范。

  • by gazzadownunder
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 gazzadownunder/MCP-OAuth-Compliance

使用说明

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-compliance

CLI选项

mcp-oauth-compliance [options]

Options:
  -p, --port <number>  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. 预注册 (优先级1)-使用现有的客户端凭据(如果可用)
  2. 客户端ID元数据文档 (优先级2)-HTTPS URL作为客户端id
  3. 动态客户端注册 (优先级3)-RFC 7591回退

选择协议版本

在web界面中,从下拉列表中选择所需的协议版本:

  1. 2025年前-25:使用原始规范测试服务器
  2. 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 validation

TLS版本支持

合规性测试仪支持用于安全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

项目结构