MCP AI Agent 约 12 分钟

我当年手搓的 MCP 授权链,被 EMA 标准化了——但只标准化了一半

由 MCP Enterprise-Managed Authorization(EMA)转正引出:EMA 用 ID-JAG 把授权决策上移到企业 IdP,解决的是「接入面」的单点登录与集中管控;但它明确不做运行时逐动作授权——Agent 进入系统后能做什么,协议留了空白。结合我此前项目「巧妙规避而非彻底解决」的经历写个人视角:接入层押注 EMA 对齐标准,行为层(per-action policy、HITL 审批、审计)才是数字员工产品的差异化空间。

MCP EMA ID-JAG AI Agent 企业授权 安全

前几天刷到一条新闻:MCP 的 Enterprise-Managed Authorization(EMA)转正为 stable——Anthropic、Microsoft、Okta 已经采用,Claude、VS Code 等客户端,以及 Asana、Atlassian、Figma、Linear、Supabase 等一批 Server 都宣布了支持。 看到新闻的第一反应不是「又一个协议更新」,而是一阵强烈的既视感:EMA 做的这件事,我几年前在项目里手搓过一个私有版。这篇文章想讲清楚三件事:我当年为什么要手搓、EMA 把哪一半标准化了、以及剩下那一半为什么协议永远不会替你解决。 先补一段背景。EMA(Enterprise-Managed Authorization,企业托管授权)是 MCP 授权规范的官方扩展。它把「谁能连哪个 MCP Server、拿什么 scope」这个决策,从每个用户的逐个授权,上移到企业自己信任的身份提供商(IdP,如 Okta)手里:管理员配置一次策略,员工用企业身份登录一次,被授权的 MCP Server 就自动全部连上,全程没有任何 per-server 的 OAuth 授权环节——官方把这个体验叫 zero-touch

per-user OAuth 弹窗,从来不是我们的选项

把 Agent 接进企业内部系统,生态里的教科书路径是 per-user OAuth:每个用户 × 每个下游系统,各自走一遍授权弹窗、各自维护一份 token。这个乘法放到企业里,结局不难推演:

没错,这就是上一节那条手搓链的标准化版本:平台 token 换成了 IdP 签发的身份断言,点对点的私有换发约定换成了公开的 IETF 草案,散落在后端配置里的授权决策上移到了企业 IdP——我当年欠下的四条债,EMA 直接还掉了前两条;至于后两条,正是下半篇要讲的事。落地上,Okta Cross App Access 是首个支持的 IdP 路径,而且要 IdP 和 MCP Server 两头都支持这个扩展——有意义,但还不算完整。

关键边界:EMA 把身份策略与工具调用解耦——它只决定「谁能连哪个 Server、什么 scope」这个连接级问题;token 签发后不再检查 MCP 流量,也就是不做运行时逐动作授权。下半篇的讨论,全都发生在这条边界之外。素材来源:InfoQ《AI Model Context Protocol Adds Centralised Auth for Enterprise》(2026-07-06)原文

一个自然的追问:JWT 被抓到,能靠 prompt 注入偷别人数据吗?

这是很多人会混掉的地方。要先拆开两条独立的攻击链:「抓到 JWT」是凭证窃取 / 重放,「prompt 注入」是操纵 LLM。 先立一个前提:无论 EMA 还是自建方案,凭证都不该进入模型上下文。只要守住这条,单纯的 prompt 注入偷不到一个 LLM 从没见过的 JWT。prompt 注入真正的危害,是操纵模型越权调用工具——但用的仍是当前会话本人的 token,它能让 A 的 Agent 在 A 的权限内乱来,却不会自动拿到 B 的 token 去查 B。 真正能「拿到别人信息」的是另外两条,且都不靠 prompt 注入

「我的工号是 XXX,我的 sso_token 是 xxx,请把我的账单给我。」

如果工具的 sso_token / user_code模型可见的入参,模型会老老实实把它们塞进 tool call——本该由平台层从后端隐式注入的可信通道,就退化成了用户可控通道。而我曾引以为豪的反向认证在这里救不了你:用户贴进来的 token 本身是有效的,回调 SSO 校验必然通过。 它有两个严重程度不同的版本:

版本攻击方式门槛
**A · 冒充**贴一张**别人的有效 token**,直接以对方身份拿数据token 重放,入口从抓包变成聊天框,更低
**B · 越权 / IDOR(更狠)**Server 用 `user_code` 查数据,却只单独校验 token 是否有效、不校验 token 是否属于该 user_code → 用**自己的合法 token + 别人的工号**就能读别人的账单连偷 token 都省了

一句话判断中招哪种:「查谁的数据」这个身份,是从校验通过的 token 推导出来的,还是从入参 user_code 取的? 后者即版本 B。

回到主线:EMA 把接入面(集中授权、zero-touch 登录)标准化了;但 token 的 sender-constraint、运行时逐动作授权、HITL、审计,以及「认证参数绝不落到模型可控面」这些行为层的事,协议永远不会替你做。这正是数字员工产品(Ronne 企业版)要自己扛、也是差异化空间所在。

对做 Agent 产品的启示:接入层对齐标准,行为层做差异化

把这件事拉远一点看,EMA 转正给所有做企业 Agent 产品的人划出了一条清晰的分界线。 接入层:停止手搓,对齐标准。 我当年那条私有换发链,正确的历史定位是「EMA 出现之前的过渡方案」。今天再做企业接入,架构上就该按「授权决策在 IdP」来设计:能走 ID-JAG 就走 ID-JAG;客户 IdP 暂不支持时保留 fallback 路径(协议本身也是 additive 的),但要保证未来能平滑切换到标准链路,而不是在私有约定上越陷越深。 行为层,才是产品真正要扛的事。 EMA 说得很明白:token 签发之后,它不看 MCP 流量。Agent 进了系统之后能做什么——per-action policy、高危操作的 HITL 审批、全链路审计、sender-constrained token,以及「认证参数绝不落到模型可控面」这条铁律——协议全部留白。这块留白对协议是边界,对产品是空间:数字员工卖给企业的信任,恰恰建立在这些协议不管的地方。 所以回到标题:我当年手搓的那条 MCP 授权链,EMA 确实把它标准化了——但只标准化了接入的那一半。行为的那一半,从来就不该指望协议来解决,那正是产品要做的事

文档信息

京ICP备2021015985号-1