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

在 Azure 逻辑应用中使用简易身份验证(应用服务身份验证)保护聊天代理工作流(预览版)

适用于:Azure 逻辑应用(标准)

重要

此功能为预览版,受 Microsoft Azure 预览版补充使用条款限制。

代理工作流扩展集成选项,因为它们可以与更多样化的调用方交换消息,例如人员、代理、模型上下文协议(MCP)服务器和客户端、工具代理和外部服务。 虽然非代理工作流与一组小型、已知和固定的调用方交互,但代理调用方可能来自动态、未知和不受信任的网络。 因此,必须对每个调用方进行身份验证并强制实施权限。

为了帮助保护生产中的聊天代理工作流,请设置 Easy Auth 以对呼叫者或想要与聊天代理交互的人员进行身份验证和授权。 简易身份验证(也称为应用服务身份验证)提供以下功能供你使用:

  • 为每个调用方请求提供已验证的标识。
  • 为每个用户分配连接。
  • 强制实施条件访问策略。
  • 颁发可吊销凭据。
  • 根据最低特权原则、 角色范围授予权限。
  • 在 Azure 门户之外提供外部聊天客户端,以便用户可以与对话代理交互。

通过这些措施,可以在精细级别对每个调用方进行身份验证和授权,并在需要时快速撤销访问权限。 如果没有这些控制,你将面临不受控制的访问权限、泄露的机密(如共享访问签名(SAS)URL 和访问密钥、弱审核线索和其他安全隐患。

轻松身份验证将 Microsoft Entra ID 用作单独的安全层,以提供满足需求的内置身份验证和授权功能。 在工作流外部进行安全措施后,您可以将更多精力集中在业务逻辑的开发上。 这种关注点分离使得代理工作流更易于生成、调试、操作、监控、维护、管理和审核。

非代理工作流安全性通常涉及静态 SAS、轮换机密和网络边界控制,例如访问限制、IP 允许列表、服务标记、虚拟网络集成和专用终结点。 使用代理工作流,可以围绕最终用户、托管标识、服务主体及其范围和角色设计授权。 能够实现更安全的全球访问,同时下游工作流操作仍能遵守精细权限。

本指南介绍如何创建应用注册,然后为标准逻辑应用资源设置 Easy Auth,该资源可以包含代理和非代理工作流。

重要

Easy Auth 将配置信息存储在逻辑应用资源的基础应用设置中,例如 ,WEBSITE_AUTH_ENABLEDWEBSITE_AUTH_DEFAULT_PROVIDERMICROSOFT_PROVIDER_AUTHENTICATION_SECRET。 除非你想要使用 ARM 模板、Bicep 模板或 Terraform 模板设置自动化,否则不要手动编辑这些设置。

如需了解更多信息,请参阅以下文章:

先决条件

  • 一个 Azure 帐户和订阅。 如果没有订阅,可以注册免费的 Azure 帐户

  • 在您的 Microsoft Azure 帐户上,使用 Microsoft Entra 应用程序开发人员 内置角色来创建应用注册。

  • 使用会话代理工作流部署的标准逻辑应用资源。

    有关详细信息,请参阅 在 Azure 逻辑应用中为聊天交互创建聊天代理工作流

  • 逻辑应用资源的 Azure 贡献者角色或更高级别角色,拥有通过 Microsoft Entra 为目标租户创建应用注册的权限。

    重要

    若要设置 Easy Auth,请确保具有与逻辑应用标准参与者角色不同的更高级别的 Azure 参与者角色。

  • (可选)选择是仅支持用户流中的交互式登录,还是也支持使用托管标识或服务主体的调用方。

    有关详细信息,请参阅 Azure 应用服务和 Azure Functions 中的身份验证和授权

  • (可选)如果要为该域强制实施特定的 重定向 URI ,则为自定义域。

创建应用注册

若要以最佳方式开始轻松身份验证设置,请直接从逻辑应用资源在 Microsoft Entra ID 中创建新的应用注册。 如果必须改用原来的应用注册,则必须更新应用注册,以使其能清晰地与 Easy Auth 和 Azure 的客户端配合使用。

  1. Azure 门户中,打开你的标准逻辑应用资源。

  2. 在资源边栏菜单中的 “设置”下,选择“ 身份验证”。

  3. 在“身份验证”页上,选择“添加标识提供者”。

    屏幕截图显示了打开“身份验证”页的标准逻辑应用。

    身份验证 ”页现在显示用于设置标识提供者的 “基本信息 ”选项卡。

  4. 在“基本信息”选项卡上,为“标识提供者”选择“Microsoft”的 Microsoft Entra ID。

  5. “应用注册 ”部分的 “应用注册类型”中,选择 “(建议用于对话代理)创建新的应用注册,其中显示了此选择的相应选项。

  6. 为应用注册提供唯一的显示名称,例如: agent-logic-app-reg-prod

  7. 对于 用户分配的托管标识,请选择 “创建新的用户分配的托管标识”。

    可以通过提供名称或选择现有标识来创建新标识。

  8. 对于 支持的帐户类型,请选择 “当前租户 - 单租户”, 除非你想要有意接受其他租户。

    单租户设置仅指当前组织目录中的帐户。 因此,此目录中的所有用户和来宾帐户都可以使用应用程序或 API。 例如,如果目标受众在组织内部,请使用此设置。

    以下示例演示应用注册的外观:

    屏幕截图显示应用注册基本信息。

    重要

    除非设置了明确的治理和条件访问策略,否则请勿选择 任何 Microsoft Entra 目录 - 多租户

    如需了解更多信息,请参阅以下文章:

  9. “其他检查”下,选择以下值(如果尚未选择):

    设置 价值
    客户端应用程序要求 仅允许来自此应用程序本身的请求
    标识要求 允许来自特定标识的请求
    允许的身份 仅在选中 允许来自特定标识的请求 时显示。

    默认预填充值是表示当前用户的对象 ID,即您自己。 可通过以下方式更新此值:

    - 包括面向其他开发人员或用户的对象标识符。
    - 使用组声明包括特定组,而不是单个对象 ID。
    - 为逻辑应用资源选择现有的应用注册。 如果这样做,请确保更新应用注册以便与 Easy Auth 顺利配合。

    有关详细信息,请参阅 使用内置授权策略
    租户要求 仅允许来自颁发者租户的请求
  10. 跳过 “排除的路径 ”部分。

  11. (可选)在 应用服务身份验证设置下,查看以下设置并采取相应的作:

    设置 Action
    限制访问 除非计划允许某些经过身份验证的终结点,否则请选择“ 要求身份验证 ”以阻止所有匿名请求。
    未经身份验证的请求 根据调用方是代理还是基于代理的,选择“HTTP 302 Found 重定向:推荐用于代理”。
  12. 完成后,选择“ 添加” 以完成添加标识提供者。

    Azure 创建应用注册、更新应用设置并启用 Easy Auth 运行时。 Azure 完成后,逻辑应用 身份验证将Microsoft 列为标识提供者。 客户端和调用方现在必须对其身份进行验证。 逻辑应用按预期拒绝未经身份验证的客户端和调用方,并在请求不包含有效令牌时发出 302 发现重定向 响应或 401 未授权 响应。

    创建完应用注册后,请尽可能少地设置逻辑应用,直到确认身份验证按预期工作为止。 稍后,可以通过转到应用注册资源上的以下页面来添加想要强制执行的任何权限范围或应用角色:

    • 在应用注册边栏的“ 管理”下,选择“ 公开 API ”以添加权限范围。 有关详细信息,请参阅添加范围

    • 在应用注册边栏的“管理”下,选择“应用角色”以分配应用角色。 有关详细信息,请参阅 “分配应用角色”。

    或者,可以在下一部分中查看相应的步骤: 更新现有应用注册

  13. 若要检查应用注册是否已正确设置,请参阅 “测试和验证简易身份验证设置”。

更新现有应用注册

如果必须重复使用与另一个 API 或早期原型共享的现有应用注册,请按照以下步骤查看和调整指定的设置,以便应用注册可以与 Easy Auth 和代理客户端完全协作。

  1. 在 Azure 门户搜索框中,找到并选择 Microsoft Entra ID

  2. 在边栏菜单上的“ 管理”下,选择 “应用注册”,然后找到并选择应用注册。

  3. 在应用注册边栏菜单上,展开 “管理”。

  4. 在“管理”下,选择“品牌和属性”,并确认“主页 URL”设置指定你的逻辑应用的网站 URL。

    注释

    主页 URL 对于仅限后端的 API 或代理 API 是可选的。 仅当最终用户需要登录或文档页面时设置此值。 令牌重定向不使用此值。

  5. 在“管理”下,选择“身份验证”。

    1. “平台配置”下,确保 Web 条目存在。

    2. Web 条目的 重定向 URI 下,找到预填充的 Easy Auth(应用服务身份验证)回调 URI,该 URI 遵循以下语法:

      https://<logic-app-name>.azurewebsites.net/.auth/login/aad/callback

      保留此默认值,除非方案需要公开自定义 API 应用程序 ID。 此回调 URI 是默认 访问令牌 访问群体 ,并指定哪些资源可以接受来自想要访问这些资源的客户端的访问令牌。

      允许令牌受众的目的是仅接收那些为这些资源提供有效令牌的请求。 访问令牌请求涉及两方:请求令牌的客户端以及接受令牌的资源。 接收方称为令牌的“目标对象”,在本例中指的是你的逻辑应用。

      有关详细信息,请参阅 什么是重定向 URI?

    3. 如果 Azure 未预填充 重定向 URI 设置,请使用逻辑应用名称手动输入 URI,例如:

      https://my-chatbox-logic-app.azurewebsites.net/.auth/login/aad/callback

      重要

      除非托管交互式前端,否则不要使用自定义重定向 URI。

    4. 忽略前端通道注销 URL设置。

    5. 对于 隐式授权和混合流,请选择以下两个选项:

      • 访问令牌(用于隐式流)
      • ID 令牌(用于隐式流和混合流)

      有关详细信息,请参阅以下文档:

    6. “支持的帐户类型”下,选择与业务需求匹配的选项。

      在大多数情况下,选择“仅此组织目录中的帐户(仅 Microsoft - 单租户)”。 对于多租户选项,请确保已设置明确的 Azure 治理和条件访问策略。 有关这些选项的详细信息,请参阅 支持的帐户类型的验证差异

    7. “高级设置”下,对于 “允许公共客户端流”,保留 “否 ”设置以启用指定的移动和桌面流。

      当本机公共客户端必须避免使用设备或身份验证代码进行资源所有者密码凭据 (ROPC) 流时,会有例外。

    8. 完成后,选择“保存”。

  6. 在“管理”下,选择“证书和机密”。“联合凭据 ”选项卡上,设置具有逻辑应用访问权限的新用户分配托管标识,以便在 应用注册中将托管标识用作联合标识凭据

    如果没有具有逻辑应用访问权限的用户分配的托管标识,请执行以下步骤:

    1. 创建用户分配的托管标识
    2. 将用户分配的标识添加到逻辑应用
    3. 在应用注册中将用户分配的标识设置为联合标识凭据
  7. (可选)如果需要设置 声明 (如角色、范围、用户组或 XMS_CC),请执行以下步骤:

    1. 在“管理”下,选择“令牌配置” 。

    2. “可选声明 ”部分中,添加声明。

      注释

      为了避免令牌膨胀,请设置角色或范围检查,而不是大组声明。

  8. 在“ 管理”下,选择 API 权限,然后执行以下步骤:

    1. 在“已配置权限”下,选择“添加权限”。
    2. 在“ 请求 API 权限 ”窗格中的 “Microsoft API ”选项卡上,找到并选择 “Microsoft Graph”。
    3. 对于权限类型,请选择 “委派权限”。
    4. “选择权限 ”框中,输入 User.Read
    5. “权限 ”列中,展开 “用户”,然后选择 “User.Read ”权限。

    有关详细信息,请参阅 “添加权限以访问 Microsoft Graph”。

  9. (可选)在“ 管理”下,选择“ 公开 API”,以便可以定义和公开权限范围。

    对于“应用程序 ID URI”设置,预填充的 URI 是一个唯一标识符,表示逻辑应用资源作为访问令牌中的受众,并使用以下格式:

    api://<application-client-ID>

    在此 API 部分定义的作用域 中,如果要仅依赖于验证角色和受众,则无需定义或公开任何权限范围。 但是,如果希望 Azure 客户端请求委派权限,请执行以下步骤来定义这些范围:

    1. 选择 “添加范围 ”并提供以下信息:

      设置 必选 价值
      范围名称 是的 user_impersonation
      谁可以许可 是的 管理员和用户
      管理员许可显示名称 是的 租户管理员为权限范围提供同意时,同意消息中显示的范围标签或名称。

      例如:
      访问 <“logic-app-name”>
      管理员同意定义 是的 当租户管理员在同意屏幕上展开范围时,同意屏幕显示的权限范围的详细描述。

      例如:
      允许应用程序代表已登录用户访问 <logic-app-name> 。
      用户许可显示名称 当最终用户为此范围提供同意时,授权界面显示的权限范围的可选名称。

      例如:
      访问 <“logic-app-name”>
      用户同意定义 在同意屏幕上,最终用户展开权限范围时,显示的可选详细说明。

      例如:
      允许应用程序代表你访问 <logic-app-name> 。
      是的 已启用
    2. 完成后,选择“ 添加范围”。

    3. “作用域” 列表中,查看更新的范围设置,确认它们是否按预期显示。

  10. 完成应用注册更新后,转到标准逻辑应用资源。

  11. 在逻辑应用边栏的 “设置”下,选择“ 身份验证”。

  12. “身份验证 ”页上的 “身份验证设置”旁边,选择 “编辑” 以查看设置。 在 “编辑身份验证设置 ”窗格中,确认以下值:

设置 价值 Description
应用服务身份验证 已启用 您的逻辑应用已通过简易身份验证设置并启用。
限制访问 需要身份验证 客户和调用方必须对其身份进行验证。
未经身份验证的请求 是的 逻辑应用按预期拒绝未经身份验证的客户端和调用方,并在请求不包含有效令牌时发出 302 发现重定向 响应或 401 未授权 响应。

测试和验证简易身份验证设置

设置 Easy Auth 后,Azure 门户中工作流 的“聊天 ”页上的内部聊天界面将变得不可用。 相反,您必须通过 Azure 门户之外的外部聊天客户端与会话代理进行互动。 若要确认 Easy Auth 按预期工作,请执行以下步骤,在外部聊天客户端中执行测试:

  1. 在设计器工具栏或工作流边栏上,选择 “聊天”。

    内部聊天界面不再显示在 “聊天 ”页面上。

  2. “概要” 部分中,选择 “聊天客户端 URL ”链接,这将打开新的浏览器选项卡。

  3. 在权限请求提示符下,提供同意并接受请求。

    屏幕截图显示权限请求同意提示。

    浏览器页面将刷新并显示外部聊天客户端的界面。

    小窍门

    还可以在 iFrame HTML 元素 中嵌入聊天客户端 URL,该元素可与要在其中提供聊天客户端的网站一起使用,例如:

    <iframe src="https:/<logic-app-name>.azurewebsites.net/api/agentsChat/<workflow-name>/IFrame" title="<chat-client-name>"></iframe>

  4. 在外部聊天界面中,启动或继续与聊天代理交互。

  5. 若要查看工作流的运行历史记录,请执行以下步骤:

    1. 返回到 Azure 门户中的工作流。

    2. 在工作流边栏上的 “工具”下,选择“ 运行历史记录”,然后选择最新的工作流运行。

    3. 在监视视图中,确认运行历史记录和操作状态是否按预期显示。

排查 Easy Auth 测试期间的错误

下表描述了在设置 Easy Auth 时可能会遇到的常见问题、可能的原因以及可采取的措施:

问题或错误 可能的原因 Action
401 ,其中 invalid_token + error_description 提到了受众 访问令牌的接收方与指定的允许令牌接收方之间存在不匹配。 确保访问令牌的受众与允许的令牌受众匹配。
403 禁止访问 可能意味着找不到请求的工作流或代理。 检查工作流中的操作是否存在授权问题。

在工作流中使用标识

当 Easy Auth 验证请求时,Easy Auth 会基于标识提供者将标识数据注入请求标头。 逻辑应用使用这些标头对调用方进行身份验证。

如需了解更多信息,请参阅以下文章: