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

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

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

概述

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

Diagram that shows Logic App to API direct connection.

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

Diagram that shows Logic App to API connection via Azure Application Proxy.

Microsoft Entra 应用程序代理和关联的连接器有助于安全授权和集成到本地服务,而无需对网络安全基础结构进行额外的配置。

先决条件

若要学习本教程,需要:

注意

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

配置应用程序访问

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

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

  2. 浏览到“标识”>“应用程序”>“应用注册”。

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

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

    注意

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

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

    Screenshot of the Microsoft Entra App Registration Detail.

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

    Screenshot of the Microsoft Entra App Registration API Permissions Menu Item.

  7. 在“API 权限”页中:

    1. 单击“添加权限”按钮

    2. 在“请求 API 权限”弹出窗口中:

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

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

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

      4. 单击“添加权限”

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

      Screenshot of the Microsoft Entra App Registration API Permissions Detail.

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

    Screenshot of the Microsoft Entra App Registration Certificates and Secrets Menu Item.

  9. 在“证书和机密”页中:

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

    2. 单击“新建客户端机密”按钮

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

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

      2. 单击“添加”

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

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

      Screenshot of the Microsoft Entra App Registration Client Secret Detail.

配置逻辑应用

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

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

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

    Screenshot of the Azure Logic App Trigger Options Pane.

  4. 在操作详细信息中:

    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. 在“身份验证类型”中,选择“Active Directory OAuth”

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

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

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

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

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

      5. 凭据类型:机密

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

      Screenshot of Azure Logic App HTTP ActionConfiguration.

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

注意事项

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

  • 虽然逻辑应用 HTTP 操作会显示明文值,但强烈建议将应用注册机密密钥存储在 Azure 密钥保管库中,以便安全检索和使用。

另请参阅