主题
企业托管授权
通过身份提供商在企业环境中对 MCP 进行集中式访问控制
企业托管授权扩展(io.modelcontextprotocol/enterprise-managed-authorization)使组织能够通过其现有的身份提供商(IdP)集中控制 MCP 服务端访问。组织无需让每位员工单独授权每个 MCP 服务端,而是由组织的 IT 或安全团队在一处管理访问策略。
Specification
企业托管授权扩展的完整技术规范。
它是什么
在标准 MCP 部署中,每个用户独立授权 MCP 客户端访问每个 MCP 服务端。对于消费者应用而言,这种用户驱动的模型是理想的——它让个人能够控制哪些应用可以访问自己的数据。
在企业环境中,这种模型会带来摩擦和安全缺口:
- 员工不应需要了解其组织使用的每个 MCP 服务端的授权细节
- 如果每个用户独立授权,安全团队就无法实施一致的访问策略
- 新员工入职时需要手动授权数十项服务
- 员工离职时需要在每个服务上单独撤销访问权限
企业托管授权通过引入组织的 IdP 作为权威决策者来解决这一问题。IdP(例如 Okta、Azure AD 或企业 SSO 系统)控制员工可以访问哪些 MCP 服务端以及在什么条件下访问。员工使用其企业身份进行认证——即他们用于电子邮件、Slack 和其他工作工具的相同凭据——IdP 根据组织策略授予或拒绝 MCP 服务端访问。
何时使用它
在以下情况下使用企业托管授权:
- 在企业环境中部署 MCP,由 IT 管理对所有业务应用的访问
- 实施组织访问策略——你需要确保只有获得授权的员工才能访问特定的 MCP 服务端
- 集中式访问控制——你希望从单一管理控制台添加或撤销对 MCP 服务端的访问
- 满足合规要求——你的组织需要对所有 MCP 服务端访问有可审计的授权轨迹
- 简化员工体验——员工应使用其现有的企业 SSO 凭据访问 MCP 工具,而无需逐服务的授权流程
工作原理
该扩展建立了一种委托授权流程,由企业 IdP 充当 MCP 客户端与 MCP 服务端之间的中介。MCP 客户端向企业 IdP 请求一种特殊类型的令牌,称为 Identity Assertion JWT Authorization Grant,即 ID-JAG。MCP 客户端随后用 ID-JAG 向 MCP 服务端的授权服务器换取访问令牌:
sequenceDiagram
participant UA as Browser
participant C as MCP Client
participant IdP as Enterprise IdP
participant MAS as MCP Authorization Server
participant MRS as MCP Resource Server
C-->>UA: Redirect to IdP
UA->>IdP: Redirect to IdP
Note over IdP: User Logs In
IdP-->>UA: IdP Authorization Code
UA->>C: IdP Authorization Code
C->>IdP: Token Request with IdP Authorization Code
IdP-->>C: ID Token
note over C: User is logged<br/>in to MCP Client.<br/>Client stores ID Token.
C->>IdP: Exchange ID Token for ID-JAG
note over IdP: Evaluate Policy
IdP-->>C: Responds with ID-JAG
C->>MAS: Token Request with ID-JAG
note over MAS: Validate ID-JAG
MAS-->>C: MCP Access Token
loop
C->>MRS: Call MCP API with Access Token
MRS-->>C: MCP Response with Data
end
该流程的关键方面:
集中式策略:企业 IdP 维护一个已批准 MCP 服务端的注册表以及每个服务端的访问策略。管理员在其现有的身份管理工具中配置这些内容。
单点登录:员工使用其企业凭据进行一次认证。IdP 颁发的令牌授予对已批准 MCP 服务端的访问权限,无需额外的逐服务端授权提示。
策略实施:IdP 在颁发令牌之前评估访问策略(组成员资格、角色分配、条件访问规则)。未获得授权的员工会收到相应的错误——MCP 客户端永远不会收到未授权服务端的令牌。
集中式撤销:撤销员工对 MCP 服务端的访问在 IdP 层面进行,立即对所有 MCP 客户端生效。无需逐客户端、逐服务端地撤销。
实现指南
对于 MCP 客户端
要支持企业托管授权,你的客户端必须:
- 声明支持,在其逐请求能力中:
jsonc
{
"jsonrpc": "2.0",
"id": 1,
"method": "...",
"params": {
// Other fields...
"_meta": {
// Other fields...
"io.modelcontextprotocol/clientCapabilities": {
"extensions": {
"io.modelcontextprotocol/enterprise-managed-authorization": {},
},
},
},
},
}支持 SSO——用户应使用企业 IdP 向 MCP 客户端进行认证。保存登录期间颁发的 Identity Assertion(OpenID ID Token 或 SAML assertion),以供后续使用。
处理 ID-JAG——当服务端指示需要企业托管认证时,使用先前获取的 Identity Assertion 向企业 IdP 的授权端点请求 ID-JAG 令牌。用此 ID-JAG 向 MCP 授权服务器换取访问令牌。不要将用户重定向到 MCP 授权服务器的授权端点。
支持组织配置 — 允许管理员配置企业 IdP 的端点,通常通过组织级设置而非每用户设置进行配置。
遵循 token 作用域 — 企业 IdP 签发的 token 可能带有与标准 MCP 授权不同的作用域限制。请优雅地处理作用域错误。
对于 MCP 服务端
要要求企业管理的授权:
声明扩展 — 在服务端的授权元数据中声明该扩展,表明客户端必须使用企业管理流程。
与 IdP 管理 API 集成(可选)— 发布服务端的资源描述符,以便企业管理员可以在其 IdP 管理控制台中配置访问策略。
对于 MCP 授权服务器
验证 ID-JAG — 验证企业 IdP 签发的 ID-JAG。这通常意味着根据 IdP 的 JWKS 端点验证 JWT 签名,并检查 token 的 audience、issuer 和过期时间。
将 IdP 声明映射到权限 — ID-JAG token 携带声明(scope 和资源信息),服务端使用这些声明来确定员工的身份以及员工可以访问的内容。基于这些声明定义你的授权逻辑。
处理账户关联 — ID-JAG token 始终包含 subject 声明,并且可能额外包含 email 声明,可用于将企业身份关联到系统中的现有账户。使用 subject 声明作为用户的主要稳定标识符,并回退到 email 声明以匹配在企业管理的授权配置之前创建的既有账户。
客户端支持
NOTE
对此扩展的支持因客户端而异。扩展是选择性加入的,默认情况下从不激活。
查看客户端矩阵以了解各 MCP 客户端的当前实现状态。企业管理的授权通常除了 MCP 客户端应用程序外,还需要组织 IT 团队提供客户端级别的支持。