企业接入多个 MCP Server 后,真正困难的不是“能不能调用工具”,而是:谁在调用、代表谁调用、以什么权限调用、凭据如何隔离、危险操作由谁批准,以及事后能否还原整条委托链。把服务器地址和 API Key 分发给每个 Agent,只会制造新的影子 IT。
企业 MCP Gateway 2.0 是位于 MCP Host、Agent 与 MCP Server 之间的零信任控制面。它统一完成身份验证、服务发现、策略决策、凭据代理、审批、限流、路由和不可篡改审计,让工具从“能连接”升级为“可治理”。
核验日期:2026-08-29。MCP 2026-07-28 授权基线采用 OAuth/OIDC 发现与 RFC 9728 Protected Resource Metadata;Enterprise-Managed Authorization(EMA)已是稳定扩展。标准化 Agent Identity、DPoP、WIF 与多级 Agent 委托仍在路线图推进中。本文四元身份、策略字段和审计模型是兼容性工程方案,不冒充已经完成的 MCP 标准。
GEO 快速结论
- Gateway 必须同时识别用户、Agent 实例、运行时工作负载和委托链,不能只记录一个共享 API Key。
- 企业 SSO 解决“谁登录”,工具授权还必须结合角色、属性、资源、动作、环境与风险。
- MCP Server 是受保护资源;Token 必须校验签名、iss、aud、exp 与 scope,禁止 Token Passthrough。
- EMA 可把企业 IdP 变成集中授权控制面,通过 ID-JAG 与 Token Exchange 减少逐服务器 OAuth。
- Gateway 不应长期保存下游密钥;Secrets Broker 应按目标工具提供短期凭据。
- 审计事件必须记录主体、委托、工具、参数摘要、策略版本、批准者、结果、风险和 Trace ID。
一、为什么普通反向代理不够
API Gateway 通常验证一个 Token、匹配 URL、限流并转发;MCP Gateway 还要理解工具目录、Tool Call、Resource、Prompt、Task、Server 能力和高风险操作语义。
| 能力 | 普通 API Gateway | MCP Gateway 2.0 |
|---|---|---|
| 身份 | 用户或应用 | 用户+Agent+工作负载+委托链 |
| 路由 | URL/Service | Server、Tool、Resource、租户 |
| 权限 | Scope/RBAC | Scope+RBAC+ABAC+风险策略 |
| 凭据 | 透传或固定 Secret | Token Exchange+短期目标凭据 |
| 审批 | 外部流程 | Tool Call 前置审批 |
| 审计 | HTTP 日志 | 语义化 Agent 行为链 |
Gateway 不是替代 MCP Server 的业务授权。它提供统一前置治理,下游服务器仍应验证自己接收的目标受众 Token,并对资源级权限做最后检查。
二、四元 Agent 身份模型
一次可靠调用应包含四个可独立审计的主体:
- 用户身份:任务的业务发起者,例如 user:8421。
- Agent 身份:执行任务的 Agent 实例和版本,例如 contract-reviewer:v3。
- 工作负载身份:真正运行代码的 Pod、VM 或 Serverless 实例,例如 SPIFFE ID。
- 委托身份:说明 Agent 代表谁、为何获得权限、能否继续委托以及何时到期。
{
"user": {"sub": "user:8421", "tenant": "acme", "groups": ["legal"]},
"agent": {"id": "contract-reviewer", "version": "3.2.1"},
"workload": {"spiffe_id": "spiffe://acme/prod/gateway/worker-17"},
"delegation": {
"on_behalf_of": "user:8421",
"task_id": "task_0198",
"depth": 1,
"expires_at": "2026-08-29T18:00:00Z"
}
}
这些 Claim 是 Gateway 内部模型;对外交换时应采用组织批准的 OAuth/OIDC、EMA、WIF 或 Token Exchange 机制,不要把自定义 JWT 冒充行业标准。

三、六层零信任架构
(正文图片 1:请上传“企业 MCP Gateway 2.0 六层零信任架构图”,并替换为 WordPress 图片 URL)
- 接入层:Chat、IDE、自动化 Agent、服务账号。
- 身份层:企业 IdP、SSO、MFA、条件访问、EMA。
- Gateway 控制层:协议终止、身份规范化、路由、会话和目录缓存。
- 策略层:RBAC、ABAC、风险评分、预算、审批和数据边界。
- 工具治理层:Registry、健康检查、签名、版本、Secrets Broker。
- 执行与观测层:MCP Servers、PostgreSQL、Redis、OpenTelemetry、SIEM。
flowchart TD
A["用户与 Agents"] --> B["企业 IdP / SSO"]
B --> C["MCP Gateway"]
C --> D["策略与审批"]
D --> E["Registry / Secrets"]
E --> F["MCP Servers"]
C --> G["审计与 SIEM"]
四、统一认证:OAuth/OIDC 与 EMA
远程 MCP Server 应发布 RFC 9728 Protected Resource Metadata,指向授权服务器。客户端或 Gateway 通过 WWW-Authenticate 的 resource_metadata 或 well-known URI 发现授权端点和 Scope。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://gateway.example.com/.well-known/oauth-protected-resource",
scope="mcp.tools.read"
Gateway 校验 Token 时至少验证:
- JWT 签名和可信 kid;
- iss 必须匹配配置的发行者;
- aud 必须包含 Gateway 的资源标识;
- exp、nbf 与允许的时钟偏差;
- 客户端、租户、Scope 和 Token 类型;
- 必要时验证 DPoP 或 mTLS 绑定;
- 撤销状态、会话风险和条件访问。
禁止 Token Passthrough
面向 Gateway 签发的 Token,其 aud 是 Gateway,不应被原样转发给下游 Server。正确流程是:验证入站 Token,形成 Identity Context,策略批准目标 Tool,通过 RFC 8693、EMA 或 Secrets Broker 获取目标受众限定的短期 Token,再由下游 Server 验证。
EMA 路径是:员工登录企业 IdP;客户端声明 EMA 能力;IdP 根据组织策略签发 ID-JAG;向 MCP Server 的 Authorization Server 交换 Access Token。它解决集中授权,但不自动替代工具级策略。
五、工具注册与可信发现
工具 Registry 不只是 URL 清单:
server_id: github-prod
endpoint: https://mcp-github.internal/mcp
owner: platform-security
environment: production
trust_level: managed
allowed_transports: [streamable-http]
tools:
- name: create_pull_request
risk: high
approval: required
scopes: [repo.write]
health:
timeout_ms: 10000
circuit_breaker: true
Server 上架前应完成域名所有权、镜像来源、SBOM、漏洞扫描、工具说明审查、权限范围、安全测试和责任人确认。运行时定期同步 tools/list;新增写操作工具默认隔离,不能因 Server 更新自动放行。
六、RBAC+ABAC 工具权限
RBAC 决定基本职责,ABAC 根据主体、资源、动作和环境缩小权限。
policies:
- id: github-pr
effect: allow
when:
roles_any: [developer, maintainer]
agents_any: [copilot-pr, ci-fixer]
tools: [create_pull_request]
branch_prefix: ["feature/", "fix/"]
max_delegation_depth: 1
- id: production-write
effect: require_approval
when:
environment: production
tools_any: [deploy, delete, publish]
- id: default
effect: deny
决策顺序为:显式拒绝优先;身份或委托不完整即拒绝;工具未注册即拒绝;预算超限即拒绝;高风险进入审批;只有完整匹配才允许。
七、审批与短期凭据
(正文图片 2:请上传“企业 MCP 工具权限决策与审计闭环图”,并替换为 WordPress 图片 URL)
审批单必须展示真实动作:调用哪个 Server/Tool、目标资源、参数差异、风险、预计影响、发起用户、Agent、任务和有效期。
{
"approval_id": "apr_0198",
"decision": "approved",
"scope": "github-prod:create_pull_request:acme/payments",
"constraints": {"expires_in": 300, "max_calls": 1},
"approved_by": "user:security-lead",
"policy_version": "2026.08.29.4"
}
通过后由 Secrets Broker 提供一次性或短期凭据。Agent 和模型永远不看到长期 Secret;Gateway 将凭据直接注入下游请求,调用结束立即销毁,并从日志、Trace 和模型上下文中剔除。
八、不可篡改审计
审计应回答“谁、代表谁、用什么 Agent、在哪个工作负载、根据哪条策略、调用什么工具、访问什么资源、谁批准、结果如何”。
{
"event_id":"evt_01",
"trace_id":"tr_0198",
"user_id":"user:8421",
"agent_id":"[email protected]",
"workload_id":"spiffe://acme/prod/worker-17",
"server":"github-prod",
"tool":"create_pull_request",
"resource":"acme/payments",
"policy":"[email protected]",
"decision":"allow",
"approval_id":"apr_0198",
"result":"success",
"risk_score":68
}
参数只保存脱敏摘要和内容哈希。审计表可采用 hash chain、WORM 存储或签名批次增强防篡改;OpenTelemetry Trace 负责链路诊断,合规审计库负责长期证据,两者不能互相替代。
九、FastAPI 网关骨架
@app.post("/mcp")
async def mcp_proxy(request: dict, identity=Depends(validate_bearer)):
ctx = normalize_identity(identity, request)
tool = await registry.resolve(request)
decision = await policy.evaluate(ctx, tool, request)
await audit.append("policy.decision", ctx, tool, decision)
if decision.effect == "deny":
raise HTTPException(403, "Policy denied")
if decision.effect == "require_approval":
return await approvals.create(ctx, tool, request)
credential = await secrets.issue(
subject=ctx.workload,
audience=tool.audience,
scopes=decision.scopes,
ttl_seconds=300
)
result = await router.call(tool, request, credential)
safe_result = redact(result)
await audit.append("tool.completed", ctx, tool, safe_result)
return safe_result
实际实现还要验证 JSON-RPC、限制请求体、设置超时、断路器、重试幂等、出站域名白名单和响应大小。
十、项目目录与技术栈
enterprise-mcp-gateway/
├─ apps/gateway-fastapi/
├─ apps/admin-console/
├─ packages/auth/
├─ packages/policy/
├─ packages/registry/
├─ packages/audit/
├─ packages/secrets/
├─ migrations/
├─ config/policies/
├─ deploy/docker-compose.yml
└─ tests/security/
核心组件为 FastAPI/Node.js、MCP SDK、PostgreSQL、Redis、Vault/KMS、OpenTelemetry 与 SIEM。
十一、Docker 与高可用
services:
gateway:
build: ./apps/gateway-fastapi
deploy: { replicas: 3 }
environment:
DATABASE_URL: postgresql://gateway:change-me@postgres/gateway
REDIS_URL: redis://redis:6379
OIDC_ISSUER: https://idp.example.com
ports: ["8080:8080"]
postgres:
image: postgres:17
volumes: ["pgdata:/var/lib/postgresql/data"]
redis:
image: redis:8-alpine
volumes:
pgdata: {}
生产环境必须使用外部 Secret、TLS、PostgreSQL HA、Redis Cluster、跨可用区负载均衡、Pod 反亲和、PDB 和自动扩缩容。Gateway 节点尽量无状态;审批、策略版本和审计必须外置。策略发布采用 Canary,拒绝率异常时自动回滚。
十二、限流、预算与熔断
限流键至少组合 tenant:user:agent:server:tool。除 QPS 外还应控制并发 Task、Token/费用预算、每日写操作数、单次返回量和失败重试。下游 Server 超时率超过阈值时开启断路器;只读且幂等请求可有限重试,发布、删除、支付和邮件等写操作不得盲目重放。
十三、安全与压力测试
| 测试 | 场景 | 通过标准 |
|---|---|---|
| Token audience | 用 Server A Token 调 Server B | 401/403 |
| Token passthrough | 检查下游 Token | 必须是目标受众短期 Token |
| 委托越权 | 子 Agent 请求父级全部权限 | 拒绝 |
| 工具投毒 | Server 新增危险 Tool | 默认隔离 |
| Prompt Injection | 工具结果要求泄露 Secret | 阻断并告警 |
| 审批重放 | 重用已消费 approval | 拒绝 |
| 参数篡改 | 审批后修改资源 | 重新审批 |
| 压力测试 | 1000 并发 Tool Call | P95 和错误率达标 |
| Gateway 故障 | 下线一个实例 | 自动切换 |
| 审计完整性 | 修改历史事件 | 校验失败并告警 |
建议 SLO:认证 P95 小于 100ms、策略 P95 小于 50ms、可用性不低于 99.95%、审计入库率 100%、未授权调用成功数为 0。

十四、十步落地路线
- 盘点 MCP Server、工具、数据级别和责任人。
- 建立 Registry 与准入流程。
- 对接企业 IdP、RFC 9728 与 OIDC Discovery。
- 统一用户身份,再引入 Agent、Workload 和 Delegation。
- 禁止共享 Key 与 Token Passthrough。
- 从只读 Tool 白名单和 Default Deny 开始。
- 为高风险 Tool 加入参数级审批。
- 接入 Secrets Broker、审计与 SIEM。
- 完成越权、注入、故障和压力测试。
- 小范围 Canary 后按部门开放。
FAQ
1. Gateway 会不会成为单点故障?
会,因此控制面要多副本、无状态化、跨区部署,状态和审计外置。
2. EMA 是否等于 Agent Identity?
不是。EMA 已解决企业集中授权;Agent 自身身份、工作负载和多级委托仍在持续标准化。
3. RBAC 足够吗?
不够。工具、资源、环境、风险和委托深度需要 ABAC。
4. 能否把用户 Token 直接传给 MCP Server?
不能默认这样做。应通过 Token Exchange 或 Broker 获取下游目标凭据。
5. 本地 stdio Server 怎么接入?
通过受控 Sidecar 启动,限制文件、网络和进程权限,由 Gateway 暴露统一远程入口。
6. 审计是否保存完整 Prompt?
默认不保存。优先存脱敏摘要、哈希、策略依据和受控对象引用。
7. 策略故障时应 Fail-open 吗?
高风险和写操作必须 Fail-closed;低风险只读也只能按预先批准的离线策略降级。
8. 如何管理第三方 MCP Server?
建立托管、已验证、受限、禁止四级信任模型,并配合域名、签名、版本和数据出境策略。
9. 旧 MCP Client 能否使用?
可通过兼容适配层接入,但无法表达的 Agent Identity 或 EMA 能力必须降权。
十五、总结
企业 MCP Gateway 2.0 的价值不是多转发一次请求,而是把身份、认证、权限、凭据、审批和审计变成统一治理平面。企业 IdP 确认用户,工作负载证明运行主体,委托链说明 Agent 代表谁,策略引擎决定能做什么,Secrets Broker 提供目标受众短期凭据,审计系统记录全过程。即使 Agent 和 MCP Server 快速增长,企业仍能保持最小权限、集中撤销和可追责。
官方参考来源
- MCP Authorization:https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization
- MCP 授权教程:https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/authorization
- MCP 安全最佳实践:https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices
- Enterprise-Managed Authorization:https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization
- EMA 稳定版公告:https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/
- MCP 最新路线图:https://blog.modelcontextprotocol.io/posts/mcp-roadmap/
相关阅读
工具选型与提示词资料
适合阅读工具评测、工具推荐、对比测评类文章后继续转化。