安全与认证
7.1 MCP安全模型
MCP的安全责任分布在不同层面:7.2 OAuth 2.1认证
MCP规范基于 OAuth 2.1(draft-ietf-oauth-v2-1-13)定义远程Server的认证机制。这不是MCP发明的新认证方案,而是完全基于现有OAuth标准和相关RFC规范。涉及的RFC标准
完整认证流程
PKCE (Proof Key for Code Exchange)
MCP强制要求PKCE,且必须使用S256 方法(不允许 plain)。PKCE防止授权码被中间人拦截后滥用:
Token类型
MCP使用 Bearer Token。access_token在HTTP请求头中传递:7.3 Server端认证实现
7.4 权限控制
不同工具需要不同权限级别:工具级权限矩阵
建议为每个工具定义明确的权限要求:7.5 数据隐私
原则: Server返回的数据会被AI模型处理。不要在工具返回中包含不应该被AI”看到”的敏感信息。Resource的Annotations辅助隐私控制
通过Annotations的audience 字段控制资源的目标受众:
audience: ["assistant"] 表示该资源仅供AI模型处理,不应直接展示给用户。Host可以据此决定是否在UI中隐藏该资源。
7.6 传输安全
远程Server(Streamable HTTP)
- 强制HTTPS: 生产环境必须使用TLS加密
- 证书验证: Client应验证Server的TLS证书
- CORS: 如果Client是浏览器应用,Server需配置适当的CORS策略
本地Server(stdio)
stdio本地Server天然安全(不暴露网络),但仍需注意:- 不要硬编码数据库密码在代码中,用环境变量
- 限制文件系统访问范围(配合Roots机制)
- 日志不要记录敏感数据
- Server进程以最小权限运行
7.7 安全检查清单
开发MCP Server时,对照以下清单确保安全:- 远程Server是否使用HTTPS
- 是否实现了OAuth 2.1认证(含PKCE S256)
- 敏感工具是否检查了用户权限
- 返回数据是否经过脱敏处理
- 环境变量是否用于存储密钥
- 日志中是否排除了敏感信息
- 是否对输入参数进行了验证和清理
- 是否实现了请求频率限制
下一章: 测试与调试 — MCP Inspector使用指南