土法炼钢 · 系统与基础设施

【Agent 身份与安全】MCP 架构与安全基线

文章导航

分类入口
architecturesecurity
标签入口
#mcp#model-context-protocol#oauth#agent#tool-calling#stdio#sse#security

目录

Model Context Protocol(MCP) 把 LLM 应用连接外部工具和数据的标准化——Host 跑模型,Client 连 Server,Server 暴露 tools、resources、prompts。从安全视角,MCP 解决的是工具供应链问题:谁认证 Server、谁授权 tool 调用、transport 上 secret 如何走。

本文以 MCP Specification(截至 2026-06 的公开版本 2025-03-26,A 级)为准,标注与 OAuth 2.1 草案 的衔接点。旧版 HTTP+SSE transport(2024-11-05)已被 Streamable HTTP 取代——部署时需核对 Server 协议版本。


一、Host / Client / Server 三角

flowchart TD
  HOST["MCP Host<br/>IDE / Agent 运行时"]
  LLM["LLM"]
  CLIENT["MCP Client"]
  S1["Server: Git"]
  S2["Server: Postgres"]
  HOST --> LLM
  HOST --> CLIENT
  CLIENT -->|"stdio 或 Streamable HTTP"| S1
  CLIENT -->|"stdio 或 Streamable HTTP"| S2
角色 职责 信任假设
Host UI、模型推理、聚合多个 Client 用户直接交互;Host 策略是最后防线
Client 协议会话、capability 协商、JSON-RPC Host 内嵌;须受 Host 策略约束
Server tools / resources / prompts 默认不可信第三方

MCP 基于 JSON-RPC 2.0 消息(UTF-8)。生命周期:initialize → initialized → 能力交换 → tools/list、tools/call 等。

关键架构事实:一个 Host 可连多个 Server。每个 Server 的 OAuth token、API key 必须隔离——Client 不得把 Server A 的 credential 泄漏给 Server B(第 07 篇 展开供应链)。


二、Transport:stdio vs Streamable HTTP

MCP spec 2025-03-26 定义两种标准 transport(A 级):

2.1 stdio

属性 规范要求
启动方式 Client 以子进程启动 Server
消息通道 stdin / stdout,newline 分隔 JSON-RPC
stderr Server 可写日志;Client 可忽略
stdout 约束 仅合法 MCP 消息——禁止 printf 调试污染
sequenceDiagram
  participant Client
  participant Server as Server Process
  Client->>+Server: Launch subprocess
  loop Message Exchange
    Client->>Server: Write JSON-RPC to stdin
    Server->>Client: Write JSON-RPC to stdout
    Server--)Client: Optional logs on stderr
  end
  Client->>Server: Close stdin, terminate
  deactivate Server

安全含义:

2.2 Streamable HTTP(取代 HTTP+SSE)

2025-03-26 spec 用 Streamable HTTP 替代 2024-11-05 的 HTTP+SSE transport。

属性 要求
端点 单一 MCP endpoint,支持 POST + GET
POST 每个 JSON-RPC 消息一次 POST;可返回 JSON 或 SSE stream
GET 可选 SSE stream,Server 主动推送
Session Mcp-Session-Id header(初始化后)

Security Warning(spec 原文意图,A 级):

  1. Server 必须验证 Origin header——防 DNS rebinding。
  2. 本地 Server 应只 bind 127.0.0.1,非 0.0.0.0。
  3. Server 应对所有连接做认证。

无上述保护时,远程网页可通过 DNS rebinding 调用用户本机 MCP Server——与 CSRF 变体同类。

2.3 Transport 对比表

维度 stdio Streamable HTTP
部署 本地子进程 独立 HTTP 服务
认证 进程边界 + OS 用户 OAuth / mTLS / API Key
多租户 单用户机器 团队共享 Server
主要威胁 恶意二进制、本地提权 网络攻击、Origin 绕过、会话劫持
TLS 不适用 必须 HTTPS

stdio 不是”更安全”——只是攻击面不同。企业远程 MCP 服务必须用 Streamable HTTP + 完整认证栈。

2.4 向后兼容

Spec 定义:新 Client 应对 Server URL POST InitializeRequest;若 4xx 则 fallback 旧 HTTP+SSE。生产环境应显式配置 transport 版本,避免静默降级到旧协议。


三、MCP 能力与攻击面

3.1 Tools

tools/list 返回 tool 名 + JSON Schema description。tools/call 执行 tool。

方法 数据流 风险
tools/list Server → Client → 可能进入 LLM context 恶意 description = indirect prompt injection 入口
tools/call LLM → Client → Server → 外部系统 越权调用、参数注入

3.2 Resources

resources/read 返回只读数据——内容可能含隐藏指令(安全侧见 第 07 篇)。credential 角度:resource URI 不得嵌入 token。

3.3 Prompts

Server 提供的 prompt 模板——同样进入模型 context,需 Host 侧 allowlist。


四、认证:OAuth 2.1 for MCP

MCP Authorization 扩展(截至 2026-06 仍为草案演进中,以 modelcontextprotocol.io 当前 spec 为准)描述:

4.1 推荐 token 模型

反模式 推荐
用户主 session token 注入 MCP Server per-Server scoped token
全 scope access token 共享给所有 Server 每 Server 独立 resource / audience
refresh token 存 MCP Server refresh 仅存 Host/Gateway;Server 拿短期 access token

与 Token Exchange 衔接:Host 经 Gateway 用 RFC 8693 换 audience=git-mcp-server 的 delegated token。

4.2 授权序列

sequenceDiagram
  participant User
  participant Host as MCP Host
  participant IdP as Authorization Server
  participant MCPS as MCP Server

  User->>Host: 连接 Git MCP Server
  Host->>IdP: PKCE authorize scope=mcp:tools:git
  IdP->>User: consent UI
  User->>IdP: 批准
  IdP->>Host: authorization code
  Host->>IdP: code + PKCE verifier
  IdP->>Host: access_token aud=git-mcp
  Host->>MCPS: Initialize + Bearer token
  MCPS->>MCPS: 验证 aud + scope + exp
  Host->>MCPS: tools/list, tools/call

4.3 Session 与 MCP HTTP Session

Streamable HTTP 的 Mcp-Session-Id:

安全:Session ID 应密码学随机(spec 建议 UUID/JWT/hash)。泄露 Session ID = 劫持 MCP 会话——须与 Bearer token 绑定或短期轮换。


五、Tool 暴露面 = 攻击面

风险 说明 缓解
Tool poisoning 恶意 description 诱导模型越权 Host 展示 tool 列表供用户批准;策略引擎过滤
Over-privileged tool run_sql 无 WHERE 限制 OPA/Cedar 在 Host 层
Indirect injection Resource 含隐藏指令 清洗 resource;本文只谈 credential 与授权
Cross-server leak Server A 的 token 出现在 Server B 请求 凭据隔离清单 §六

Host 应在 tools/call 发出前做策略检查——不能假设 LLM 输出参数安全。


六、Secret 隔离清单


七、JSON-RPC 与错误处理

MCP 错误通过 JSON-RPC error 对象返回。Host 应区分:

错误类 安全动作
401 / 认证失败 不自动重试 user password;走 OAuth refresh
403 / scope 不足 提示用户 re-consent 或缩小 tool
Server 内部错误 不将 stack trace 注入 LLM context

八、多 Server 拓扑

flowchart LR
  subgraph Host Process
    C1[Client A]
    C2[Client B]
    POL[Policy Engine]
  end
  C1 -->|token_A| SA[Server A]
  C2 -->|token_B| SB[Server B]
  POL --> C1
  POL --> C2

Policy Engine 统一拦截所有 tools/call——与 零信任策略引擎 同构:默认拒绝、显式允许。


九、与 llm-infra 系列边界

llm-infra/ 讲框架选型、网关、部署。本系列讲 identity + policy + audit。MCP 工程实现见 llm-infra;安全基线以本文与 spec 为准。


十、部署检查表(Streamable HTTP)

检查项 通过标准
HTTPS 生产强制
Origin 验证 实现 spec Security Warning
OAuth PKCE Public Client 无 secret
Token audience 每 Server 独立
Session ID 熵 ≥ 128 bit
Rate limit 防 brute force / DoS
日志 不含 Bearer token 明文

十一、边界

十二、MCP Initialize 与安全

Initialize 前 HTTP 层须已完成 OAuth。Capability 协商应 disable 不需要的能力减攻击面。


十三、stdio 沙箱

专用低权用户、seccomp、网络 egress allowlist——恶意 Server 等同本地 RCE。


十四、DNS Rebinding

Spec Security Warning:验证 Origin、localhost bind、认证——缺任一项可被远程网页调用本地 MCP。


十五、OAuth Scope 命名

mcp:server:<id>:tools:invoke per-server——与 Token Exchange 组合。


十六、安全检查总表

# 项 stdio HTTP
1 来源可信 ✓ ✓
2 per-server 凭据 ✓ ✓
3 TLS N/A ✓
4 Origin N/A ✓
5 Policy on tools/call ✓ ✓

上一篇:Human-in-the-Loop

下一篇:MCP 供应链


参考资料

  1. Model Context Protocol, Specification 2025-03-26, Transports / Authorization(阅读日期 2026-06)
  2. IETF OAuth 2.1 Draft, The OAuth 2.1 Authorization Framework(截至 2026-06 draft 状态)
  3. Token Exchange — 本系列第 02 篇
  4. 零信任供应链

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。

2026-06-18 · architecture / security

【Agent 身份与安全】AI Agent 的身份、委托与审计

IAM 系列(人)与零信任系列(边界)的自然延伸:当 LLM Agent 代表用户调用 API、执行 SQL、读写邮件时,传统 OAuth 模型如何扩展?拆解 Token Exchange、MCP 安全模型、工具级授权、持续验证与审计归因。


By .