配置内置 MCP 服务器授权(预览版)

应用服务身份验证 允许你通过要求 MCP 客户端使用标识提供者进行身份验证来控制对模型上下文协议 (MCP) 服务器的访问。 可以按照本文中的说明使应用符合 MCP 服务器授权规范

重要

MCP 服务器授权定义对服务器的访问,它不提供对单个 MCP 工具或其他构造的精细控制。

配置标识提供者

使用标识提供者配置应用服务身份验证。 标识提供者注册对于 MCP 服务器应是唯一的。 不要重复使用其他应用程序组件的现有注册。

创建注册时,请记下注册或标识提供者文档中定义的范围。

配置受保护的资源元数据(预览版)

MCP 服务器授权要求服务器托管受保护的资源元数据(PRM)。 对应用服务身份验证的 PRM 的支持目前为预览版。

若要为 MCP 服务器配置 PRM,请将 WEBSITE_AUTH_PRM_DEFAULT_WITH_SCOPES 应用程序设置设置为应用程序的逗号分隔范围列表。 所需的范围定义为应用注册的一部分,或由标识提供者记录。 例如,如果使用 Microsoft Entra ID 提供程序,并允许应用服务为你创建注册,则会创建一个默认范围 api://<client-id>/user_impersonation。 你应将 WEBSITE_AUTH_PRM_DEFAULT_WITH_SCOPES 设置为该值。

MCP 客户端注意事项

若要登录用户,MCP 客户端必须注册到标识提供者。 某些提供程序支持动态客户端注册(DCR),但许多提供程序不支持,包括Microsoft Entra ID。 当 DCR 不可用时,需要使用客户端 ID 预配置客户端。 请参阅客户端或客户端 SDK 的文档,了解如何提供客户端 ID。

如果使用 Microsoft Entra ID,可以指定已知的客户端应用程序并将其标记为预授权进行访问。 建议尽可能进行预授权。 如果没有预授权,用户或管理员需要 同意 MCP 服务器注册 及其所需的任何权限。

对于用户同意场景,许可配置包括 MCP 客户端使用交互式登录来显示同意提示。 某些 MCP 客户端可能无法呈现交互式登录。 例如,如果要在 Visual Studio Code 中生成 GitHub Copilot 要使用的 MCP 工具,客户端将尝试使用已登录用户的上下文,并且不会显示同意提示。 在这些情况下,需要预授权客户端应用程序以避免同意问题。

出于开发/测试目的,可以通过直接在浏览器中登录应用程序,为自己授予用户同意。 导航到 <your-app-url>/.auth/login/aad 会启动登录流程,并在需要时请求你的同意。 然后,可以从另一个客户端尝试登录。

MCP 服务器注意事项

应用服务身份验证验证 MCP 客户端提供的令牌,并在响应 MCP 初始化请求之前应用任何配置的授权策略。 可能需要更新 MCP 方案的授权规则。 例如,如果使用了 Microsoft Entra ID 提供程序并允许应用服务为你创建注册,则默认策略仅允许应用本身获取的令牌。 因此,你将 MCP 客户端添加到身份验证配置中允许的应用程序列表。 有关详细信息,请参阅 使用内置授权策略

MCP 服务器框架经常抽象化传输,但在某些情况下,它们可能会公开基础 HTTP 上下文。 当 HTTP 上下文可用时,可以访问应用服务 身份验证提供的用户声明和其他身份验证信息

注意

用于 MCP 服务器授权的令牌旨在表示对 MCP 服务器的访问,而不是对下游资源的访问。 服务器转发令牌的直通方案会创建安全漏洞,因此请避免这些模式。 如果需要访问下游资源,请通过代理流或其他显式委派机制获取新令牌。