🧠 图解记忆: 认证证明是谁,授权限制能做什么,沙箱与审计控制做坏后的影响。
💡 答案要点
认证方式对比:
| 方式 | 适用场景 | 安全性 | 实现复杂度 |
|---|---|---|---|
| 无认证(stdio) | 本地进程 | ⭐⭐⭐⭐⭐ | 极简 |
| API Key | 内部服务 | ⭐⭐⭐⭐ | 简单 |
| OAuth 2.1 | 企业/云服务 | ⭐⭐⭐⭐⭐ | 中等 |
| Bearer Token | API服务 | ⭐⭐⭐ | 简单 |
OAuth 2.1(2026年MCP标准):
python
# OAuth 2.1认证的MCP Server
from fastmcp.server.auth import OAuth2Server
mcp = FastMCP(
"企业MCP服务器",
auth=OAuth2Server(
issuer="https://auth.company.com",
client_id="mcp-server-prod",
scopes=["read", "write"],
jwks_uri="https://auth.company.com/.well-known/jwks.json"
)
)API Key认证(内部使用):
python
# 方式1:环境变量
# 启动时:export MCP_API_KEY=sk-xxx
# server.py
import os
@mcp.tool()
def get_secret_data(keyword: str) -> dict:
# 验证API Key
api_key = os.environ.get("MCP_API_KEY")
if not api_key:
raise ValueError("MCP_API_KEY not set")
# 实际业务逻辑
return search_data(keyword)OAuth 2.1认证流程:
用户AI → MCP Client → OAuth认证 → MCP Server
↓
1. 获取Access Token
2. Token携带Scope权限
3. Server验证Token + Scope
4. 执行工具调用安全最佳实践:
展开 Python 代码示例(45 行)
python
# 1. 输入验证(防止注入)
@mcp.tool()
def safe_search(query: str) -> list:
# 严格参数校验
if len(query) > 500:
raise ValueError("Query too long")
# SQL注入防护
sanitized = query.replace("'", "\\'").replace(";", "")
results = db.execute(
"SELECT * FROM items WHERE name LIKE ?",
f"%{sanitized}%"
).fetchall()
return results
# 2. 限流保护
from functools import wraps
import time
rate_limit = {}
def rate_limit_tool(max_calls=100, window=60):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
key = func.__name__
now = time.time()
# 清理过期记录
rate_limit[key] = [t for t in rate_limit.get(key, []) if now - t < window]
if len(rate_limit.get(key, [])) >= max_calls:
raise ValueError("Rate limit exceeded")
rate_limit[key].append(now)
return func(*args, **kwargs)
return wrapper
return decorator
@rate_limit_tool(max_calls=10, window=60)
@mcp.tool()
def expensive_operation(data: str) -> dict:
# 每分钟最多调用10次
return process(data)面试话术:
"MCP Server安全三件套:1)认证用OAuth 2.1,企业标准最安全;2)输入验证防注入,严格校验参数类型和长度;3)限流防滥用,硬编码max_calls防止API被刷。stdio模式下本地进程不需要认证,数据不离开机器安全性最高。云端部署必须走OAuth 2.1,Token带Scope权限控制。"
