通过 Azure 逻辑应用为调用自定义 API 设置身份验证

若要提高调用 API 的安全性,可通过 Azure 门户设置 Microsoft Entra 身份验证,这样就无需更新代码。 或者,还可利用 API 代码要求并强制执行身份验证。

可以通过以下方式添加身份验证:

在不更改代码的情况下,验证对 API 的调用

下面是此方法的常规步骤:

  1. 创建两个 Microsoft Entra 应用程序标识:一个用于逻辑应用资源,另一个用于 Web 应用(或 API 应用)。

  2. 要验证对 API 的调用,请对与逻辑应用的 Microsoft Entra 应用程序标识相关联的服务主体使用凭据(客户端 ID 和密码)。

  3. 在逻辑应用的工作流定义中包含此应用程序 ID。

第 1 部分:为逻辑应用创建 Microsoft Entra 应用程序标识

逻辑应用资源使用此 Microsoft Entra 应用程序标识对 Microsoft Entra ID 进行身份验证。 只需为目录将此标识设置一次。 例如,可选择为所有逻辑应用使用相同标识,但也可为每个逻辑应用创建唯一标识。 可以在 Azure 门户中或者使用 PowerShell 设置这些标识。

  1. Azure 门户中,选择“Microsoft Entra ID”。

  2. 确认所在目录与 Web 应用或 API 应用相同。

    提示

    要切换目录,请选择配置文件,然后选择其他目录。 还可以选择“概述”>“切换目录”。

  3. 在目录菜单的“管理”下,选择“应用注册”>“新建注册”。

    “所有注册”列表显示目录中的所有应用注册。 若要仅查看自己的应用注册,请选择“拥有的应用程序”。

    Screenshot showing Azure portal with Microsoft Entra instance,

  4. 为逻辑应用的应用程序标识提供面向用户的名称。 选择支持的帐户类型。 对于“重定向 URI”,请选择“Web”,提供要将身份验证响应返回到的唯一 URL,然后选择“注册”。

    Screenshot showing

    “拥有的应用程序”列表现在包含你创建的应用程序标识。 如果未显示此标识,请在工具栏上选择“刷新”。

    Screenshot showing the application identity for your logic app.

  5. 从应用注册列表中,选择新的应用程序标识。

  6. 从应用程序标识导航菜单中,选择“概述”。

  7. 在“概述”窗格的“基本信息”下,复制并保存“应用程序 ID”,在第 3 部分中将其用作逻辑应用的“客户端 ID”。

    Screenshot showing the application (client) ID underlined.

  8. 在应用程序标识导航菜单中,选择“证书和机密”

  9. 在“客户端密码”选项卡上,选择“新建客户端密码”。

  10. 对于“说明”,请为机密提供一个名称。 在“过期时间”下,为机密选择一个持续时间。 完成后,选择“添加”。

    创建的机密将充当逻辑应用的应用程序标识的“机密”或密码。

    Screenshot showing secret creation for application identity.

    在“证书和机密”窗格中的“客户端机密”下,你的机密现在与机密值和机密 ID 一起显示

    Screenshot showing secret value and secret ID with copy button for secret value selected.

  11. 复制机密值以备后用。 在第 3 部分配置逻辑应用时,将此机密指定为“机密”或密码。

第 2 部分:为 Web 应用或 API 应用创建 Microsoft Entra 应用程序标识

如果已部署 Web 应用或 API 应用,则可在 Azure 门户中开启身份验证并创建应用程序标识。 否则,可以在使用 Azure 资源管理器模板部署时开启身份验证

在 Azure 门户中为已部署的 Web 应用或 API 应用创建应用程序标识

  1. Azure 门户中,找到并选择 Web 应用或 API 应用。

  2. 在“设置”下,选择“身份验证”>“添加标识提供者”。

  3. 添加标识提供者”窗格打开后,在“基本信息”选项卡上,从“标识提供者”列表中,选择“Microsoft”以使用 Microsoft Entra 标识,然后选择“添加”。

  4. 现在为 Web 应用或 API 应用创建应用程序标识,如下所示:

    1. 对于“应用注册类型”,请选择“新建应用注册”。

    2. 对于“名称”,请为应用程序标识提供一个名称。

    3. 对于“支持的帐户类型”,请选择适合方案的帐户类型。

    4. 对于“限制访问”,请选择“需要身份验证”。

    5. 对于“未经身份验证的请求”,请根据方案选择选项。

    6. 完成后,选择“添加”。

    刚刚为 Web 应用或 API 应用创建的应用程序标识现在显示在“标识提供者”部分中:

    Screenshot showing newly created application identity for web app or API app.

    提示

    如果未显示此应用程序标识,请在工具栏上选择“刷新”。

现在,必须找到刚刚为 Web 应用或 API 应用创建的应用程序标识的应用程序(客户端)ID 和租户 ID。 第 3 部分需使用这些 ID。 因此,请对 Azure 门户继续执行以下步骤。

在 Azure 门户中查找 Web 应用或 API 应用的应用程序标识的客户端 ID 和租户 ID

  1. 在 Web 应用的导航菜单上,选择“身份验证”。

  2. 在“标识提供者”部分,找到之前创建的应用程序标识。 选择应用程序标识的名称。

    Screenshot showing newly created application identity with 'Overview' pane open.

  3. 应用程序标识的“概述”窗格打开后,找到“应用程序(客户端) ID”和“目录(租户) ID”的值。 复制并保存该值,以便在第 3 部分使用。

    Screenshot showing application identity's 'Overview' pane open with 'Application (client) ID' value and 'Directory (tenant) ID' value underlined.

    如有必要,还可在 Web 应用或 API 应用的部署模板中使用租户 ID GUID。 此 GUID 是你的特定租户的 GUID(“租户 ID”),应显示在此 URL 中:https://sts.chinacloudapi.cn/{GUID}

使用 Azure 资源管理器模板部署时设置身份验证

如果使用的是 Azure 资源管理器模板(ARM 模板),仍需为 Web 应用或 API 应用创建 Microsoft Entra 应用程序标识,该标识与逻辑应用的应用标识不同。 若要创建应用程序标识,然后查找客户端 ID 和租户 ID,请对 Azure 门户执行前面第 2 部分中的步骤。 你将在应用的部署模板以及第 3 部分中同时使用客户端 ID 和租户 ID。

重要

为 Web 应用或 API 应用创建 Microsoft Entra 应用程序标识时,必须使用 Azure 门户,而不是 PowerShell。 PowerShell commandlet 没有设置可让用户登录到网站的必需权限。

获得客户端 ID 和租户 ID 后,将这些 ID 作为 Web 应用或 API 应用的子资源包含在部署模板中:

"resources": [
   {
      "apiVersion": "2015-08-01",
      "name": "web",
      "type": "config",
      "dependsOn": ["[concat('Microsoft.Web/sites/','parameters('webAppName'))]"],
      "properties": {
         "siteAuthEnabled": true,
         "siteAuthSettings": {
            "clientId": "<client-ID>",
            "issuer": "https://sts.chinacloudapi.cn/<tenant-ID>/"
         }
      }
   }
]

若要使用 Microsoft Entra 身份验证自动同时部署空白 Web 应用和逻辑应用,请在此处查看完整模板或选择以下“部署到 Azure”按钮:

Deploy to Azure

第 3 部分:填充逻辑应用中的授权部分

上面的模板已设置了此授权部分,但如果要直接对逻辑应用定义进行授权,则必须包括完整的授权部分。

  1. 在代码视图中打开逻辑应用定义。

  2. 转到“HTTP”操作定义,找到“授权”部分,将以下属性包含在其中:

{
   "tenant": "<tenant-ID>",
   "audience": "<client-ID-from-Part-2-web-app-or-API app>",
   "clientId": "<client-ID-from-Part-1-logic-app>",
   "secret": "<secret-from-Part-1-logic-app>",
   "type": "ActiveDirectoryOAuth"
}
属性 必选 说明
tenant Microsoft Entra 租户的 GUID。
audience 想要访问的目标资源的 GUID - Web 应用或 API 应用的应用程序标识中的客户端 ID
clientId 请求访问权限的客户端的 GUID - 逻辑应用的应用程序标识中的客户端 ID
secret 请求访问令牌的客户端的应用程序标识中的机密或密码
type 身份验证类型。 对于 ActiveDirectoryOAuth 身份验证,该值为 ActiveDirectoryOAuth

例如:

{
   "actions": {
      "HTTP": {
         "inputs": {
            "method": "POST",
            "uri": "https://your-api-chinacloudsites.cn/api/your-method",
            "authentication": {
               "tenant": "tenant-ID",
               "audience": "client-ID-from-azure-ad-app-for-web-app-or-api-app",
               "clientId": "client-ID-from-azure-ad-app-for-logic-app",
               "secret": "key-from-azure-ad-app-for-logic-app",
               "type": "ActiveDirectoryOAuth"
            }
         }
      }
   }
}

通过代码保护 API 调用

证书身份验证

若要验证从逻辑应用工作流传入 Web 应用或 API 应用的请求,可以使用客户端证书。 若要设置代码,请了解如何配置 TLS 相互身份验证

在“授权”部分中包含以下属性:

{
   "type": "ClientCertificate",
   "password": "<password>",
   "pfx": "<long-pfx-key>"
}
属性 必选 说明
type 身份验证类型。 对于 TLS/SSL 客户端证书,该值必须为 ClientCertificate
password 用于访问客户端证书(PFX 文件)的密码
pfx 客户端证书(PFX 文件)的 base64 编码内容

基本身份验证

若要验证从逻辑应用传入 Web 应用或 API 应用的请求,可以使用基本身份验证,如用户名和密码。 基本身份验证是一种常用模式,在用来生成你的 Web 应用或 API 应用的任何语言中都可以使用此身份验证。

在“授权”部分中包含以下属性:

{
   "type": "Basic",
   "username": "<username>",
   "password": "<password>"
}
属性 必选 说明
type 要使用的身份验证类型。 对于基本身份验证,该值必须是 Basic
username 要用于身份验证的用户名
password 要用于身份验证的密码

通过代码进行 Microsoft Entra 身份验证

默认情况下,在 Azure 门户中启用的 Microsoft Entra 身份验证不提供细化的授权。 例如,此身份验证将 API 锁定到特定租户,而不是特定用户或应用。

若要通过代码限制 API 访问逻辑应用,请提取具有 JSON Web 令牌 (JWT) 的标头。 检查调用方的标识,并拒绝不匹配的请求。

后续步骤