使用说明
mcp身份验证合规性
一个合规性测试套件,用于根据规范验证远程MCP(模型上下文协议)服务器的OAuth/授权表面。
它测试什么
| # | 检查 | 规格参考 |
|---|---|---|
| 1 | 未经身份验证的请求返回HTTP 401 | MCP认证规范 |
| 2 | WWW-Authenticate 标题与 Bearer 方案 |
《联邦法规》第6750条第3款 |
| 3 | resource_metadata 参数在 WWW-Authenticate |
RFC 9728§5.1 |
| 4 | Cache-Control: no-store 关于身份验证错误响应 |
OAuth 2.1最佳实践 |
| 5 | 受保护的资源元数据位于 /.well-known/oauth-protected-resource |
RFC 9728 |
| 6 | PRM包含 resource, authorization_servers |
《联邦法规》第9728条第3款 |
| 7 | OAuth AS元数据位于 /.well-known/oauth-authorization-server |
RFC 8414 |
| 8 | AS元数据: issuer, authorization_endpoint, token_endpoint |
《联邦法规》第8414条第2款 |
| 9 | PKCE S256支持 | OAuth 2.1(必须) |
| 10 | JWKS端点返回有效密钥集 | RFC 8414 |
| 11 | 动态客户端注册 | RFC 7591 |
| 12 | 通过HTTPS服务的所有端点 | MCP认证规范 |
| 13 | 元数据一致性(PRM↔ 作为↔ WWW身份验证) | 跨规范 |
| 14 | 无效令牌返回401 error="invalid_token" |
《联邦法规》第6750条第3.1款 |
快速开始
Shell脚本(超出零依赖项 curl + python3)
./mcp-auth-check.sh https://your-server.example.com/mcp/your-service
锈
cargo run -- https://your-server.example.com/mcp/your-service
输出示例
═══════════════════════════════════════════════════════
MCP OAuth Compliance Check
Server: https://example.com/mcp/google-drive
═══════════════════════════════════════════════════════
── 1. Unauthenticated Request ──
✅ PASS: Returns HTTP 401 Unauthorized
── 2. WWW-Authenticate Header (RFC 9728 §5.1) ──
✅ PASS: WWW-Authenticate header present
✅ PASS: Uses Bearer scheme
✅ PASS: Contains resource_metadata parameter
...
═══════════════════════════════════════════════════════
Results: 30 passed, 0 failed, 0 warnings
═══════════════════════════════════════════════════════
与官方合规套件的关系
官方 模型上下文协议/一致性 测试框架涵盖了MCP协议级行为(初始化、工具、资源、提示),但 不 还可以测试服务器的OAuth/授权表面。这个工具填补了这个空白。
一旦官方套件添加了服务器端身份验证场景,这个项目可能会变得多余——这很好。
运作原理
测试完全 黑匣子和非破坏性.他们只:
- 发送未经身份验证/无效的令牌HTTP请求
- 获取众所周知的元数据端点
- 执行动态客户端注册(如果端点已通告)
不需要有效的令牌。服务器上没有读取或修改数据。
许可证
麻省理工学院