使用 Microsoft Entra 应用程序代理安全地将 Azure 逻辑应用与本地 API 集成

Azure 逻辑应用是一项服务,可用于在无代码环境中轻松创建能够与各种外部服务和系统集成的托管工作流。 工作流有助于自动执行各种业务流程,例如数据集成、数据处理和事件驱动的方案。 逻辑应用与其他公共服务和基于云的服务集成。 或者,将逻辑应用与本地应用程序和服务一起使用。 专用网络集成不会通过端口转发或传统的反向代理向公众公开服务。

本文介绍如何执行必要的步骤来利用 Microsoft Entra 应用程序代理解决方案提供对逻辑应用的安全访问,同时防止内部应用程序受到恶意行动者的侵害。 过程和最终结果类似于 通过 Microsoft Entra 应用程序代理访问内部 API,特别注意在逻辑应用中使用该 API。

概述

下图显示了发布从 Azure 逻辑应用访问的本地 API 的传统方法。 此方法需要向 API 服务打开传入传输控制协议 (TCP) 端口 80 和/或 443。

显示逻辑应用与 API 之间直接连接的图表。

下图显示了如何在不打开任何传入端口的情况下,使用 Microsoft Entra 应用程序代理安全发布与逻辑应用(或其他 Azure 云服务)配合使用的 API:

逻辑应用通过 Azure 应用程序代理连接到 API 的关系图。

Microsoft Entra 应用程序代理和关联的连接器可促进与本地服务的安全授权和集成,而无需对网络安全基础结构进行更多配置。

先决条件

若要学习本教程,需要:

  • Azure 目录的管理员访问权限,以及可用于创建和注册应用的帐户
  • 活动租户中的“逻辑应用参与者”角色(或更高级别的角色)
  • 已部署的 Azure 专用网络连接器和根据 在 Microsoft Entra ID 中添加本地应用 - 应用程序代理 中的详细信息配置的应用程序。

注意

建议授予用户权利并测试登录,但本指南不需要这样做。

配置应用程序访问

创建新的企业应用程序时,也会创建匹配的应用注册。 应用注册允许使用证书、机密或联合凭据配置安全的编程访问。 若要与逻辑应用集成,请配置客户端机密密钥并配置 API 权限。

  1. 以至少应用程序管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到 Entra ID>应用注册

  3. 在“应用注册”窗口中,选择“所有应用程序”选项卡选项

  4. 导航到其名称与部署的应用程序代理应用程序匹配的应用程序。 例如,如果已将“示例应用 1”部署为企业应用程序,请选择“示例应用 1”注册项

    注意

    如果找不到关联的应用程序,则可能会删除或未自动创建该应用程序。 可以使用“新建注册”按钮创建注册。

  5. 在“示例应用 1”详细信息页中,记下“应用程序(客户端) ID”和“目录(租户) ID”字段值

  6. 在导航窗格中选择“API 权限”菜单项

    Microsoft Entra 应用注册 API 权限菜单项的屏幕截图。

    1. 选择“添加权限”按钮。

      1. 选择“我的组织使用的 API”选项卡。

      2. 按名称搜索你的应用(例如“示例应用 1”)并选择该项

      3. 确保已选择“委托的权限”,然后选中“user_impersonation”对应的框

      4. 选择“添加权限”。

    2. 检查配置的权限是否已显示。

      Microsoft Entra 应用注册 API 权限详细信息的屏幕截图。

  7. 在导航窗格中选择“证书和机密”菜单项

    Microsoft Entra 应用注册证书和机密菜单项的屏幕截图。

    1. 选择“客户端机密”选项卡项

    2. 选择“新建客户端机密”按钮。

    3. 在“添加客户端机密”弹出窗口中

      1. 输入说明和所需的过期时间

      2. 选择 “添加”。

    4. 检查新的客户端机密是否已显示。

    5. 选择新建机密的“值”所对应的“复制”按钮。 安全保存此机密以备后用,此值仅显示一次。

配置逻辑应用

  1. 在逻辑应用中,打开“设计器”视图

  2. 选择所需的触发器(如果提示选择)。

  3. 添加一个新步骤并选择“HTTP”操作

    Azure 逻辑应用触发器选项窗格的屏幕截图。

    1. 方法:选择要发送到内部 API 的所需 HTTP 方法

    2. URI:填写在 Microsoft Entra ID 中注册的应用程序 的公共 完全限定域名(FQDN),以及 API 访问所需的其他 URI(例如 ,sampleapp1.msappproxy.net/api/1/status)。

      注意

      API 的特定值取决于内部应用程序。

    3. 标头:输入要发送到内部 API 的任何所需标头

    4. 查询:输入要发送到内部 API 的任何所需查询

    5. 正文:输入要发送到内部 API 的任何所需正文内容

    6. Cookie:输入要发送到内部 API 的任何所需 Cookie

    7. 选择“添加新参数”,然后选中“身份验证”

    8. 在“身份验证类型”中,选择“Microsoft Entra ID OAuth”

    9. 对于身份验证,请填写以下详细信息。

      1. 颁发机构:Enter https://login.windows.net

      2. 租户:输入在“配置应用程序访问”中记下的“目录(租户) ID”

      3. 受众:输入在 Microsoft Entra ID 中注册的应用程序的公共 FQDN(例如 sampleapp1.msappproxy.net)。

      4. 客户端 ID:输入在“配置应用程序访问”中记下的“应用程序(客户端) ID”

      5. 凭据类型:机密

      6. 机密:输入在“配置应用程序访问”中记下的机密值

  4. 保存逻辑应用并使用触发器进行测试。

注意事项

使用此方法时,应该对需要身份验证/授权的 API 进行特殊处理。 由于访问使用了 Microsoft Entra ID OAuth,因此发送的请求中已包含一个授权字段,而内部 API 无法利用该字段(除非已配置单一登录)。 作为一种解决方法,某些应用程序提供的身份验证或授权使用了除 Authorization 标头以外的方法。 例如,GitLab 允许使用标题为“PRIVATE-TOKEN”的标头,而 Atlassian Jira 允许请求可在后续请求中使用的 Cookie

逻辑应用 HTTP 操作显示明文值。 但是,请将应用注册密钥存储在 Azure Key Vault 中,以便安全检索和使用。

另请参阅