Skip to main content

安全与认证

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使用指南