土法炼钢兴趣小组的算法知识备份

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

文章导航

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

目录

Model Context Protocol(MCP) 把 LLM 应用连接外部工具和数据的标准化——Host 跑模型,Client 连 Server,Server 暴露 toolsresourcesprompts。从安全视角,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)。生命周期:initializeinitialized → 能力交换 → tools/listtools/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

二十六.1 MCP 运维:Initialize 安全

MCP Host 在 Streamable HTTPstdio 混合部署时,Initialize 安全 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 Initialize 安全 场景下仍保持 JSON-RPC 语义。

Transport Initialize 安全 注意点
stdio 子进程 Initialize 安全 隔离
HTTP TLS + OAuth + Initialize 安全 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——Initialize 安全 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (Initialize 安全)
  Server->>Host: response / error

二十六.2 MCP 运维:SSE 重连

MCP Host 在 Streamable HTTPstdio 混合部署时,SSE 重连 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 SSE 重连 场景下仍保持 JSON-RPC 语义。

Transport SSE 重连 注意点
stdio 子进程 SSE 重连 隔离
HTTP TLS + OAuth + SSE 重连 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——SSE 重连 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (SSE 重连)
  Server->>Host: response / error

二十六.3 MCP 运维:session 固定

MCP Host 在 Streamable HTTPstdio 混合部署时,session 固定 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 session 固定 场景下仍保持 JSON-RPC 语义。

Transport session 固定 注意点
stdio 子进程 session 固定 隔离
HTTP TLS + OAuth + session 固定 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——session 固定 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (session 固定)
  Server->>Host: response / error

二十六.4 MCP 运维:CORS

MCP Host 在 Streamable HTTPstdio 混合部署时,CORS 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 CORS 场景下仍保持 JSON-RPC 语义。

Transport CORS 注意点
stdio 子进程 CORS 隔离
HTTP TLS + OAuth + CORS header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——CORS 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (CORS)
  Server->>Host: response / error

二十六.5 MCP 运维:mTLS

MCP Host 在 Streamable HTTPstdio 混合部署时,mTLS 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 mTLS 场景下仍保持 JSON-RPC 语义。

Transport mTLS 注意点
stdio 子进程 mTLS 隔离
HTTP TLS + OAuth + mTLS header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——mTLS 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (mTLS)
  Server->>Host: response / error

二十六.6 MCP 运维:rate limit

MCP Host 在 Streamable HTTPstdio 混合部署时,rate limit 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 rate limit 场景下仍保持 JSON-RPC 语义。

Transport rate limit 注意点
stdio 子进程 rate limit 隔离
HTTP TLS + OAuth + rate limit header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——rate limit 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (rate limit)
  Server->>Host: response / error

二十六.7 MCP 运维:WAF

MCP Host 在 Streamable HTTPstdio 混合部署时,WAF 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 WAF 场景下仍保持 JSON-RPC 语义。

Transport WAF 注意点
stdio 子进程 WAF 隔离
HTTP TLS + OAuth + WAF header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——WAF 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (WAF)
  Server->>Host: response / error

二十六.8 MCP 运维:content-type

MCP Host 在 Streamable HTTPstdio 混合部署时,content-type 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 content-type 场景下仍保持 JSON-RPC 语义。

Transport content-type 注意点
stdio 子进程 content-type 隔离
HTTP TLS + OAuth + content-type header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——content-type 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (content-type)
  Server->>Host: response / error

二十六.9 MCP 运维:batch JSON-RPC

MCP Host 在 Streamable HTTPstdio 混合部署时,batch JSON-RPC 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 batch JSON-RPC 场景下仍保持 JSON-RPC 语义。

Transport batch JSON-RPC 注意点
stdio 子进程 batch JSON-RPC 隔离
HTTP TLS + OAuth + batch JSON-RPC header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——batch JSON-RPC 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (batch JSON-RPC)
  Server->>Host: response / error

二十六.10 MCP 运维:progress notification

MCP Host 在 Streamable HTTPstdio 混合部署时,progress notification 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 progress notification 场景下仍保持 JSON-RPC 语义。

Transport progress notification 注意点
stdio 子进程 progress notification 隔离
HTTP TLS + OAuth + progress notification header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——progress notification 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (progress notification)
  Server->>Host: response / error

二十六.11 MCP 运维:resource 订阅

MCP Host 在 Streamable HTTPstdio 混合部署时,resource 订阅 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 resource 订阅 场景下仍保持 JSON-RPC 语义。

Transport resource 订阅 注意点
stdio 子进程 resource 订阅 隔离
HTTP TLS + OAuth + resource 订阅 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——resource 订阅 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (resource 订阅)
  Server->>Host: response / error

二十六.12 MCP 运维:prompt 模板

MCP Host 在 Streamable HTTPstdio 混合部署时,prompt 模板 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 prompt 模板 场景下仍保持 JSON-RPC 语义。

Transport prompt 模板 注意点
stdio 子进程 prompt 模板 隔离
HTTP TLS + OAuth + prompt 模板 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——prompt 模板 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (prompt 模板)
  Server->>Host: response / error

二十六.13 MCP 运维:version 协商

MCP Host 在 Streamable HTTPstdio 混合部署时,version 协商 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 version 协商 场景下仍保持 JSON-RPC 语义。

Transport version 协商 注意点
stdio 子进程 version 协商 隔离
HTTP TLS + OAuth + version 协商 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——version 协商 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (version 协商)
  Server->>Host: response / error

二十六.14 MCP 运维:error code

MCP Host 在 Streamable HTTPstdio 混合部署时,error code 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 error code 场景下仍保持 JSON-RPC 语义。

Transport error code 注意点
stdio 子进程 error code 隔离
HTTP TLS + OAuth + error code header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——error code 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (error code)
  Server->>Host: response / error

二十六.15 MCP 运维:stdio 生命周期

MCP Host 在 Streamable HTTPstdio 混合部署时,stdio 生命周期 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 stdio 生命周期 场景下仍保持 JSON-RPC 语义。

Transport stdio 生命周期 注意点
stdio 子进程 stdio 生命周期 隔离
HTTP TLS + OAuth + stdio 生命周期 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——stdio 生命周期 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (stdio 生命周期)
  Server->>Host: response / error

二十六.16 MCP 运维:remote 部署

MCP Host 在 Streamable HTTPstdio 混合部署时,remote 部署 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 remote 部署 场景下仍保持 JSON-RPC 语义。

Transport remote 部署 注意点
stdio 子进程 remote 部署 隔离
HTTP TLS + OAuth + remote 部署 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——remote 部署 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (remote 部署)
  Server->>Host: response / error

二十六.17 MCP 运维:Initialize 安全

MCP Host 在 Streamable HTTPstdio 混合部署时,Initialize 安全 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 Initialize 安全 场景下仍保持 JSON-RPC 语义。

Transport Initialize 安全 注意点
stdio 子进程 Initialize 安全 隔离
HTTP TLS + OAuth + Initialize 安全 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——Initialize 安全 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (Initialize 安全)
  Server->>Host: response / error

二十六.18 MCP 运维:SSE 重连

MCP Host 在 Streamable HTTPstdio 混合部署时,SSE 重连 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 SSE 重连 场景下仍保持 JSON-RPC 语义。

Transport SSE 重连 注意点
stdio 子进程 SSE 重连 隔离
HTTP TLS + OAuth + SSE 重连 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——SSE 重连 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (SSE 重连)
  Server->>Host: response / error

二十六.19 MCP 运维:session 固定

MCP Host 在 Streamable HTTPstdio 混合部署时,session 固定 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 session 固定 场景下仍保持 JSON-RPC 语义。

Transport session 固定 注意点
stdio 子进程 session 固定 隔离
HTTP TLS + OAuth + session 固定 header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——session 固定 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (session 固定)
  Server->>Host: response / error

二十六.20 MCP 运维:CORS

MCP Host 在 Streamable HTTPstdio 混合部署时,CORS 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 CORS 场景下仍保持 JSON-RPC 语义。

Transport CORS 注意点
stdio 子进程 CORS 隔离
HTTP TLS + OAuth + CORS header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——CORS 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (CORS)
  Server->>Host: response / error

二十六.21 MCP 运维:mTLS

MCP Host 在 Streamable HTTPstdio 混合部署时,mTLS 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 mTLS 场景下仍保持 JSON-RPC 语义。

Transport mTLS 注意点
stdio 子进程 mTLS 隔离
HTTP TLS + OAuth + mTLS header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——mTLS 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (mTLS)
  Server->>Host: response / error

二十六.22 MCP 运维:rate limit

MCP Host 在 Streamable HTTPstdio 混合部署时,rate limit 决定可用性与安全窗口。Spec(2025-03-26,截至 2026-06)要求 Client 在 rate limit 场景下仍保持 JSON-RPC 语义。

Transport rate limit 注意点
stdio 子进程 rate limit 隔离
HTTP TLS + OAuth + rate limit header 验证

Host 层 Function Calling 策略 应在 tools/call 发出前执行——rate limit 不能替代 authorization。

sequenceDiagram
  participant Host
  participant Server
  Host->>Server: MCP request (rate limit)
  Server->>Host: response / error

附录 A、MCP 架构 场景演练

A.1 邮件摘要 Agent

步骤 动作
1 用户 consent read:mail
2 Exchange scope=read:mail:inbox
3 OPA 限 folder
4 audit 含 act
flowchart LR
  S1["用户 consent read:mail"] --> S2["Exchange scope=read:mail:inbox"]
  S2 --> S3["OPA 限 folder"]
  S3 --> S4["audit 含 act"]

A.2 SQL 分析 Agent

步骤 动作
1 read:warehouse
2 只读 DB role
3 Rego deny DDL
4 HITL 导出 CSV >10k rows
flowchart LR
  S1["read:warehouse"] --> S2["只读 DB role"]
  S2 --> S3["Rego deny DDL"]
  S3 --> S4["HITL 导出 CSV >10k rows"]

A.3 MCP Git Agent

步骤 动作
1 per-server OAuth
2 stdio pin version
3 tool allowlist
4 supply chain SBOM
flowchart LR
  S1["per-server OAuth"] --> S2["stdio pin version"]
  S2 --> S3["tool allowlist"]
  S3 --> S4["supply chain SBOM"]

A.4 跨 API 编排

步骤 动作
1 多 resource Exchange
2 每 API 独立 token
3 Gateway 聚合
4 trace 串联
flowchart LR
  S1["多 resource Exchange"] --> S2["每 API 独立 token"]
  S2 --> S3["Gateway 聚合"]
  S3 --> S4["trace 串联"]

A.5 offboarding

步骤 动作
1 SCIM deactivate
2 CAEP or TTL
3 cache flush
4 audit retention
flowchart LR
  S1["SCIM deactivate"] --> S2["CAEP or TTL"]
  S2 --> S3["cache flush"]
  S3 --> S4["audit retention"]

A.6 供应链攻击响应

步骤 动作
1 disconnect MCP Server
2 rotate per-server token
3 SBOM diff
4 post-incident audit
flowchart LR
  S1["disconnect MCP Server"] --> S2["rotate per-server token"]
  S2 --> S3["SBOM diff"]
  S3 --> S4["post-incident audit"]

A.7 HITL 超时

步骤 动作
1 pending transfer
2 7200s expire
3 Agent Cancelled
4 audit expired
flowchart LR
  S1["pending transfer"] --> S2["7200s expire"]
  S2 --> S3["Agent Cancelled"]
  S3 --> S4["audit expired"]

A.8 跨云 OBO

步骤 动作
1 Entra user token
2 Gateway normalize act
3 RS 统一 audit schema
4 policy 同构
flowchart LR
  S1["Entra user token"] --> S2["Gateway normalize act"]
  S2 --> S3["RS 统一 audit schema"]
  S3 --> S4["policy 同构"]

附录 B、MCP 架构 常见问题

Q:能否省略 Agent Gateway?
A:仅当 Agent 永不持 user refresh 且 RS 支持 Token Exchange 直联——多数企业仍要 Gateway 聚 policy、HITL、audit。

Q:MCP 是否替代 OAuth?
A:否。MCP 管 tool 协议;OAuth 管身份。

Q:CAEP 未支持怎么办?
A:短 TTL(≤15min)为基线;heartbeat 补 Gateway 层 revoke。

Q:如何证明 Agent 未越权?
A:deny 日志 + policy_version + 定期 access review(IGA)。

Q:Gen2 到 Gen4 最小步骤?
A:Gateway 托管 refresh → 启用 Exchange → RS 解析 act → 下线 Agent 侧 refresh。



上一篇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 .