你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Microsoft Entra 身份验证从 Visual Studio Code 安全调用 Azure 应用服务的模型上下文协议

本文介绍如何使用 Microsoft Entra 身份验证保护 Azure 应用服务上托管的模型上下文协议(MCP)服务器。 通过启用身份验证,可确保只有使用 Microsoft Entra 进行身份验证的用户才能通过 Visual Studio Code 中的 Copilot 代理模式访问 MCP 服务器。

有关其他身份验证方法和常规 MCP 服务器安全概念,请参阅 Azure 应用服务中的安全模型上下文协议服务器

先决条件

托管 MCP 服务器的应用服务应用。 如果需要创建一个,请参阅以下教程之一:

启用 Microsoft Entra 身份验证

  1. Azure 门户中,导航到应用服务应用。

  2. 在左侧菜单中,选择“设置身份验证”>,然后选择“添加标识提供者”。

  3. “添加标识提供者 ”页上,选择 Microsoft 作为 标识提供者

  4. “应用服务身份验证设置”下,对于客户端密钥过期,选择一个过期期限(例如6 个月)。

  5. 接受所有其他默认值,然后选择“ 添加” 以创建标识提供者。

    这会使用客户端密码在 Microsoft Entra ID 中创建新的应用注册,并将应用服务应用配置为使用它进行身份验证。

在应用服务身份验证中授权 Visual Studio Code

启用身份验证后,需要授权 Visual Studio Code 访问 MCP 服务器。

  1. 在应用服务应用的 “身份验证 ”页上的 “标识提供者”下,选择创建的Microsoft提供程序旁边的 “编辑 ”(铅笔图标)。

  2. “编辑标识提供者 ”页上,在“ 附加检查>客户端应用程序要求”下,选择“ 允许来自特定客户端应用程序的请求”。

  3. 选择铅笔控件以编辑允许的应用程序。

  4. “允许的客户端应用程序 ”字段中,添加 Visual Studio Code 客户端 ID: aebc6443-996d-45c2-90f0-388ff96faa56

  5. 选择“ 确定”,然后选择“ 保存”。

在应用注册中授权 Visual Studio Code

接下来,需要配置应用注册,以便向 Visual Studio Code 公开 API。

  1. 返回到应用服务应用的 “身份验证 ”页。

  2. “标识提供者” 列中选择 Microsoft 提供程序以打开应用注册页。

  3. 在应用注册页中,从左侧菜单中选择“ 管理>公开 API ”。

  4. “授权客户端应用程序”下,选择“ 添加客户端应用程序”。

  5. “客户端 ID ”字段中,输入 Visual Studio Code 客户端 ID: aebc6443-996d-45c2-90f0-388ff96faa56

  6. 选中 user_impersonation 范围旁边的复选框以授权此范围。

  7. 选择添加应用程序

  8. 在此 API 定义的范围下,查找并复制完整范围值。 它看起来应该类似于:api://<app-registration-app-id>/user_impersonation

    在下一部分中需要此范围值。

通过设置授权范围启用受保护的资源元数据

若要启用 MCP 服务器授权,需要在应用设置中设置授权范围来配置受保护的资源元数据(PRM)。 这允许 MCP 客户端通过 /.well-known/oauth-protected-resource 终结点发现身份验证要求。

  1. 在 Azure 门户中,返回到应用服务应用页。

  2. 在左侧菜单中,选择 “设置>环境变量”。

  3. 选择 “添加” 以创建新的应用程序设置。

  4. 输入 作为“名称”WEBSITE_AUTH_PRM_DEFAULT_WITH_SCOPES

  5. 对于,请粘贴从应用注册中复制的范围:api://<app-registration-app-id>/user_impersonation

  6. 选择 “应用”,然后再次选择“ 应用 ”以确认并重启应用。

    此设置将 PRM 配置为包含 MCP 服务器授权所需的范围。

使用 Visual Studio Code 连接

现在,可以从 Visual Studio Code 连接到受保护的 MCP 服务器。

  1. 在本地计算机上打开 Visual Studio Code。

  2. 打开或创建 MCP 配置文件(mcp.json)。 对于工作区范围的 MCP 配置,请在工作区的 .vscode 目录中创建它。

  3. 添加 MCP 服务器配置:

    {
      "servers": {
        "my-app-service-mcp": {
          "type": "http",
          "url": "https://<your-app-url>.azurewebsites.net/api/mcp"
        }
      }
    }
    

    请将 <your-app-url> 替换为您实际的应用服务应用 URL。 可以在 Azure 门户中的 “概述 ”页上找到应用的默认域。 在此示例中,路径为 /api/mcp,但实际路径取决于 MCP 代码。

  4. 在 Visual Studio Code 中,打开命令面板(在 macOS 上按Ctrl+Shift+PCmd+Shift+P)。

  5. 键入 MCP:列出服务器 并按 Enter。

  6. 从列表中选择 MCP 服务器,然后选择 “启动服务器”。

  7. Visual Studio Code 会自动提示使用 Microsoft Entra ID 登录。 按照身份验证提示进行操作。

    MCP 扩展使用配置的范围处理 OAuth 流,Visual Studio Code 获取调用 MCP 服务器所需的访问令牌。

    小窍门

    如果看到意外的身份验证提示或遇到错误,请参阅 故障排除

  8. 身份验证后,MCP 服务器已连接并准备好在 GitHub Copilot Chat 代理模式或其他 MCP 客户端中使用。

测试连接

若要验证 MCP 服务器是否已得到适当的保护并可访问, 请执行以下作:

  1. 在 macOS 上,按 Ctrl+Alt+ICmd+Option+I 在 Visual Studio Code 中打开 GitHub Copilot 聊天。

  2. 尝试使用 MCP 服务器的功能。 例如,如果使用 Todos 示例:

    Show me all my tasks
    
  3. GitHub Copilot 应成功调用 MCP 服务器,并且应在聊天中看到结果。 如果遇到任何问题,请参阅 故障排除

Troubleshooting

在 Visual Studio Code 中启动 MCP 服务器时,你看到的身份验证提示指示配置是否正确:

  • 正确配置:Visual Studio Code 会提示使用 Microsoft进行身份验证。 这意味着受保护的资源元数据(PRM)已正确配置,Visual Studio Code 已成功从 /.well-known/oauth-protected-resource 端点发现授权服务器和范围。

  • 配置不正确:Visual Studio Code 会提示您使用应用服务应用上的/authorize终结点进行身份验证(例如,https://<your-app-url>.azurewebsites.net/authorize)。 这意味着 PRM 未正确配置。 Visual Studio Code 找不到授权服务器和授权范围,因此它回退到使用应用的 URL 作为授权终结点,该终结点不存在。

如果看到不正确的身份验证提示,请验证:

  • 应用设置 WEBSITE_AUTH_PRM_DEFAULT_WITH_SCOPES 正确配置了完整范围值 api://<app-registration-app-id>/user_impersonation
  • 添加应用设置后,应用服务应用已完全重启。 完成重启可能需要几分钟时间。

如果在登录后看到身份验证错误,请验证:

  • Visual Studio Code 客户端 ID(aebc6443-996d-45c2-90f0-388ff96faa56)将添加到应用服务身份验证配置(允许的客户端应用程序)和应用注册中(公开 API 中的授权客户端应用程序)。
  • 应用设置中的范围值与应用注册中定义的内容完全匹配。