配置 OAuth 2.0 身份验证

插件可以使用通过 OAuth 2.0 授权代码流获取的持有者令牌访问 MCP) 服务器或 API (模型上下文协议,默认启用用于代码交换 (PKCE) 支持的证明密钥。 在此流程中,智能 智能 Microsoft 365 Copilot 副驾驶® 副驾驶® 打开登录体验,OAuth 提供程序向 Microsoft Teams 返回授权响应,而 Teams 交换令牌的授权代码。

本文使用 MCP 插件作为默认演练。 除非另有说明,否则相同的步骤适用于从 OpenAPI 文档生成的 API 插件。

分三个步骤配置 OAuth 2.0 身份验证:向标识提供者注册 OAuth 客户端、配置重定向 URI,以及创建 OAuth 2.0 配置。

步骤 1:向标识提供程序注册 OAuth 客户端

向 OAuth 2.0 提供程序注册应用 (标识提供程序) ,以获取 客户端 ID ,对于机密 (Web) 客户端,还获取 客户端密码。 在 步骤 3 中创建 OAuth 2.0 配置时提供这些值。

对于需要授权的 MCP 服务器,请将type运行时身份验证对象OAuthPluginVault的属性设置为 。 NoneApiKeyPluginVault 适用于需要授权的 MCP 服务器。 清单中仅存储身份验证配置 ID - 未写入任何客户端 ID、客户端密码或令牌。 要动态注册客户端而不是静态注册客户端,请保留type原样OAuthPluginVault并通过动态客户端注册 (DCR) 创建身份验证配置,这对于受 Microsoft Entra ID 保护的服务器不可用。

注意

这些值适用于插件清单。 如果改为在 Microsoft 365 应用清单的节点中agentConnectors将 MCP 服务器注册为代理连接器,请使用 OAuthPluginVaultDynamicClientRegistration 也在那里。 请勿使用 AzureKeyVault:它仅存在于 devPreview 架构中,因此面向编号架构版本的包验证失败。 有关详细信息,请参阅 将 MCP 服务器注册为代理连接器

步骤 2:配置重定向 URI

将以下重定向 URI (也称为授权回调 URL) 添加到 OAuth 提供程序注册:

https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect

这是用户登录后 OAuth 提供程序发送授权响应的 URL。 Teams 在此回调 URL 处收到响应,并交换令牌的授权代码。 如果未向提供程序注册此重定向 URI,登录失败。 每个插件和提供程序的重定向 URI 都相同 - 无需为每个应用都自定义。

步骤 3:创建 OAuth 2.0 身份验证配置

OAuth 2.0 身份验证依赖于身份验证配置 (身份验证配置) - 存储在 Microsoft Enterprise 令牌存储中的记录,智能 智能 Microsoft 365 Copilot 副驾驶® 副驾驶®使用它来获取和刷新 MCP 插件的令牌。 可以通过三种方式创建身份验证配置。 建议的方法 - Microsoft 365 代理工具包和声明式代理开发人员技能 - 创建身份验证配置并自动更新插件清单。 然后,可以使用 Teams 开发人员门户来管理和优化身份验证配置。

无论你如何创建,auth config 都具有插件清单引用的 auth config ID

使用 MCP 插件生成代理时 (服务器是否需要身份验证) 或从 Microsoft 365 代理工具包中的现有 OpenAPI 文档创建 API 插件,该工具包将提示您输入 OAuth 客户端 ID客户端密码范围。 Agents Toolkit 从 MCP 服务器 (的已知终结点或从 API 插件) 的 OpenAPI 文档中提取授权、令牌和刷新终结点,在企业令牌存储中创建身份验证配置,并自动更新插件清单中的 运行时身份验证对象

注意

对于 API 插件,必须在 OpenAPI 文档中定义 securitySchemes 属性,以便 Agents Toolkit 可以读取 OAuth 详细信息。 有关详细信息,请参阅 OAuth 2.0

securitySchemes:
  OAuth2:
    type: oauth2
    flows:
      authorizationCode:
        authorizationUrl: <authorization_url>
        tokenUrl: <token_url>
        refreshUrl: <refresh_url>
        scopes:
          scope: description

PKCE 默认处于启用状态,因为许多组织会阻止客户端密码。 仅当 OAuth 提供程序不支持 PKCE 时,才在预配代理之前,在代理项目中设置为 isPKCEEnabledfalse in m365agents.yml。

isPKCEEnabled: false

要完全避免客户端密码,请向提供商(单页应用程序平台而非 Web 平台)注册公共客户端,并让 PKCE 保护代码交换。

使用声明式代理开发人员技能

声明式代理开发人员技能 (declarative-agent-developer) 是 Microsoft Work IQ 中的一项代理技能,它打包了构建声明式代理所需的知识。 无需自己运行命令或编辑清单,只需用自然语言向 Copilot 或 GitHub CLI 描述所需内容,技能就会为你搭建声明式代理、添加 MCP 插件并处理身份验证配置。 该技能仅支持 MCP 插件。 对于 OAuth 2.0,它支持静态注册和 动态客户端注册 (DCR) :它在企业令牌存储中创建身份验证配置并更新插件清单,无需手动步骤。

提示

有关使用声明式代理开发人员技能的视频演练,请参阅 使用声明式代理开发人员技能生成声明式代理

使用 Teams 开发人员门户

如果使用代理工具包或声明式代理开发人员技能,则可以选择在 Teams 开发人员门户中注册。 当您想要手动创建身份验证配置时,或者更常见的是管理 Agents Toolkit 或技能已创建的身份验证配置时,请使用它。 在门户中,可以将身份验证配置限制为特定的 Teams 应用或 Microsoft 365 组织,并修改其他属性。

Teams 开发人员门户中的 OAuth 客户端注册将代理的插件配置连接到为 MCP 服务器或 API 颁发令牌的 OAuth 提供程序注册。 此注册中的值必须与 OAuth 提供程序、插件清单和受保护的 API 终结点匹配。 不匹配的基本 URL、应用限制或身份验证配置 ID 可能会阻止用户登录或阻止令牌交换。

警告

注册限制为 任何 Teams 应用。 仅限于特定 Teams 应用的注册绑定到该 Teams 应用 ID。 智能 智能 Microsoft 365 Copilot 副驾驶® 副驾驶® 在调用 MCP 服务器时不会解析该 ID,因此预配会成功完成,然后每次工具调用都会返回错误404

  1. 打开 Teams 开发人员门户。 选择 “工具” ->OAuth 客户端注册

  2. 如果没有现有注册,请选择 “注册客户端”。 如果已有注册,请选择 “新建 OAuth 客户端注册”。

  3. 填写以下字段。

    • 注册名称:注册的友好名称。
    • 基 URL:API 的基本 URL。 此值应对应于基于 MCP 的插件的插件清单中 MCP 服务器规范对象属性中的 url URL,或 API 插件的 OpenAPI 文档中数组中的servers条目。
    • 按组织限制使用:选择哪些 Microsoft 365 组织可以使用此 OAuth 注册来访问 API 终结点。 仅将 “我的组织 ”用于一个租户中的开发或测试。 如果插件必须跨租户工作,请使用 任何 Microsoft 365 组织
    • 应用限制使用:选择任何 Teams 应用。 不要将注册绑定到 MCP 服务器的 现有 Teams 应用 ID 。 如果改为使用 Microsoft 365 Agents Toolkit 预配身份验证配置,则 m365agents.yml 中操作中的 oauth/register 等效设置为 applicableToApps: AnyApp。 即使使字段处于惰性状态,也会AnyApp保留appId该字段,因为预配驱动程序无appId条件验证,删除它会中断预配。
    • 客户端 ID:OAuth 2.0 提供程序颁发的客户端 ID 或应用程序 ID。
    • 客户端密码:OAuth 2.0 提供程序颁发的客户端密码。
    • 授权终结点:应用用于 请求授权代码的 OAuth 2.0 提供程序的 URL。
    • 令牌终结点:应用用于 兑换访问令牌代码的 OAuth 2.0 提供程序的 URL。
    • 刷新终结点:来自应用用于 刷新访问令牌的 OAuth 2.0 提供程序的 URL。
    • 范围:插件从 OAuth 提供程序请求的权限。 使用提供程序和 API 所需的范围值。 如果你的提供商使用 Microsoft 标识平台,并且你的插件需要刷新令牌,请包含在offline_access任何特定于 API 的委派范围中。
    • 启用验证密钥以进行代码交换 (PKCE) :保持启用此设置。 默认情况下处于打开状态;仅当 OAuth 提供程序不支持 PKCE 时,才将其禁用。
  4. 选择“保存”

  5. 完成注册将创建身份验证配置,并生成身份验证 配置 ID (当前在 Teams 开发人员门户中标记为 OAuth 客户端注册 ID) 。

将身份验证配置 ID 添加到插件清单

在 Teams 开发人员门户中手动创建身份验证配置时,请type运行时身份验证对象OAuthPluginVault的属性设置为 ,并将 设置为reference_id身份验证配置 ID。 代理工具包和声明式代理开发人员技能可为你执行此操作。

"auth": {
  "type": "OAuthPluginVault",
  "reference_id": "auth config ID"
},

Microsoft Entra ID 注意事项

使用 Microsoft Entra ID 保护 MCP 服务器时,适用三个约束,在工具中无法解决这些约束。

  • 动态客户端注册不可用。 Microsoft Entra ID 不发布 RFC 7591 注册终结点,因此动态客户端注册无需进行注册。 按照本文中的步骤静态注册 OAuth 客户端。
  • 节点agentConnectors没有 Microsoft Entra 授权类型。 与 不同agentConnectorscomposeExtensionsMicrosoft 365 应用清单中的节点没有microsoftEntra授权类型。 受 Microsoft Entra ID 保护的 MCP 服务器始终需要一个在 Microsoft Entra ID 中注册自己的应用以及 OAuth 身份验证配置,即使服务器前面是第一方 Microsoft API。
  • 预配时不会验证作用域同意。 预配不会检查是否可以同意你请求的范围。 无法同意成功预配的范围,然后因 需要管理员批准而失败,并且资源应用对你和租户管理员都可能是不可见的。在预配之前,确认管理员已同意范围。

管理身份验证配置

oauth/register m365agents.yml 中的操作只创建身份验证配置或跳过创建身份验证配置 - 它从不重写现有记录。

  • 如果已具有值,则 configurationId 该操作不执行任何操作。
  • 如果指向你删除的注册,则 configurationId 该操作将警告你,并且不执行任何操作。
  • 要更改现有注册中的值,请使用该 oauth/update 操作。
  • 若要删除注册,请使用 Teams 开发人员门户。 这是唯一可以删除的位置。

注销

注意

用户可以从对话助手设置>注销代理 智能智能 智能 Microsoft 365 Copilot 副驾驶® 副驾驶®中的代理。 此操作将清除存储的 OAuth 令牌。