你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
通过 Azure 逻辑应用为调用自定义 API 设置身份验证
若要提高调用 API 的安全性,可通过 Azure 门户设置 Microsoft Entra 身份验证,这样就无需更新代码。 或者,还可利用 API 代码要求并强制执行身份验证。
可以通过以下方式添加身份验证:
无需更改代码:通过 Azure 门户使用 Microsoft Entra ID 保护 API,这样就无需更新代码或重新部署 API。
注意
默认情况下,在 Azure 门户中选择的 Microsoft Entra 身份验证不提供细化的授权。 例如,此身份验证将 API 锁定到特定租户,而不是特定用户或应用。
更新 API 代码:通过代码强制执行证书身份验证、基本身份验证或 Microsoft Entra 身份验证,以此保护 API。
在不更改代码的情况下,验证对 API 的调用
下面是此方法的常规步骤:
创建两个 Microsoft Entra 应用程序标识:一个用于逻辑应用资源,另一个用于 Web 应用(或 API 应用)。
要验证对 API 的调用,请对与逻辑应用的 Microsoft Entra 应用程序标识相关联的服务主体使用凭据(客户端 ID 和密码)。
在逻辑应用的工作流定义中包含此应用程序 ID。
第 1 部分:为逻辑应用创建 Microsoft Entra 应用程序标识
逻辑应用资源使用此 Microsoft Entra 应用程序标识对 Microsoft Entra ID 进行身份验证。 只需为目录将此标识设置一次。 例如,可选择为所有逻辑应用使用相同标识,但也可为每个逻辑应用创建唯一标识。 可以在 Azure 门户中或者使用 PowerShell 设置这些标识。
在 Azure 门户中,选择“Microsoft Entra ID”。
确认所在目录与 Web 应用或 API 应用相同。
提示
要切换目录,请选择配置文件,然后选择其他目录。 还可以选择“概述”>“切换目录”。
在目录菜单的“管理”下,选择“应用注册”>“新建注册”。
“所有注册”列表显示目录中的所有应用注册。 若要仅查看自己的应用注册,请选择“拥有的应用程序”。
为逻辑应用的应用程序标识提供面向用户的名称。 选择支持的帐户类型。 对于“重定向 URI”,请选择“Web”,提供要将身份验证响应返回到的唯一 URL,然后选择“注册”。
“拥有的应用程序”列表现在包含你创建的应用程序标识。 如果未显示此标识,请在工具栏上选择“刷新”。
从应用注册列表中,选择新的应用程序标识。
从应用程序标识导航菜单中,选择“概述”。
在“概述”窗格的“基本信息”下,复制并保存“应用程序 ID”,在第 3 部分中将其用作逻辑应用的“客户端 ID”。
在应用程序标识导航菜单中,选择“证书和机密”。
在“客户端密码”选项卡上,选择“新建客户端密码”。
对于“说明”,请为机密提供一个名称。 在“过期时间”下,为机密选择一个持续时间。 完成后,选择“添加”。
创建的机密将充当逻辑应用的应用程序标识的“机密”或密码。
在“证书和机密”窗格中的“客户端机密”下,你的机密现在与机密值和机密 ID 一起显示。
复制机密值以备后用。 在第 3 部分配置逻辑应用时,将此机密指定为“机密”或密码。
第 2 部分:为 Web 应用或 API 应用创建 Microsoft Entra 应用程序标识
如果已部署 Web 应用或 API 应用,则可在 Azure 门户中开启身份验证并创建应用程序标识。 否则,可以在使用 Azure 资源管理器模板部署时开启身份验证。
在 Azure 门户中为已部署的 Web 应用或 API 应用创建应用程序标识
在 Azure 门户中,找到并选择 Web 应用或 API 应用。
在“设置”下,选择“身份验证”>“添加标识提供者”。
“添加标识提供者”窗格打开后,在“基本信息”选项卡上,从“标识提供者”列表中,选择“Microsoft”以使用 Microsoft Entra 标识,然后选择“添加”。
现在为 Web 应用或 API 应用创建应用程序标识,如下所示:
对于“应用注册类型”,请选择“新建应用注册”。
对于“名称”,请为应用程序标识提供一个名称。
对于“支持的帐户类型”,请选择适合方案的帐户类型。
对于“限制访问”,请选择“需要身份验证”。
对于“未经身份验证的请求”,请根据方案选择选项。
完成后,选择“添加”。
刚刚为 Web 应用或 API 应用创建的应用程序标识现在显示在“标识提供者”部分中:
提示
如果未显示此应用程序标识,请在工具栏上选择“刷新”。
现在,必须找到刚刚为 Web 应用或 API 应用创建的应用程序标识的应用程序(客户端)ID 和租户 ID。 第 3 部分需使用这些 ID。 因此,请对 Azure 门户继续执行以下步骤。
在 Azure 门户中查找 Web 应用或 API 应用的应用程序标识的客户端 ID 和租户 ID
在 Web 应用的导航菜单上,选择“身份验证”。
在“标识提供者”部分,找到之前创建的应用程序标识。 选择应用程序标识的名称。
应用程序标识的“概述”窗格打开后,找到“应用程序(客户端) ID”和“目录(租户) ID”的值。 复制并保存该值,以便在第 3 部分使用。
如有必要,还可在 Web 应用或 API 应用的部署模板中使用租户 ID GUID。 此 GUID 是你的特定租户的 GUID(“租户 ID”),应显示在此 URL 中:
https://sts.windows.net/{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.windows.net/<tenant-ID>/"
}
}
}
]
若要使用 Microsoft Entra 身份验证自动同时部署空白 Web 应用和逻辑应用,请在此处查看完整模板或选择以下“部署到 Azure”按钮:
第 3 部分:填充逻辑应用中的授权部分
上面的模板已设置了此授权部分,但如果要直接对逻辑应用定义进行授权,则必须包括完整的授权部分。
在代码视图中打开逻辑应用定义。
转到“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-azurewebsites.net/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 相互身份验证。
重要
在生产环境中,请始终保护凭据、证书、指纹、访问密钥和连接字符串等敏感信息和机密。 确保使用 Microsoft Entra ID 和 Azure 密钥保管库安全存储此类信息。 避免对此信息进行硬编码、与其他用户共享,或以纯文本形式保存在其他人可以访问的任何位置。 如果你认为这些信息可能已泄露,请尽快轮换机密。 有关详细信息,请参阅关于 Azure 密钥保管库。
在“授权”部分中包含以下属性:
{
"type": "ClientCertificate",
"password": "<password>",
"pfx": "<long-pfx-key>"
}
属性 | 必选 | 说明 |
---|---|---|
type |
是 | 身份验证类型。 对于 TLS/SSL 客户端证书,该值必须为 ClientCertificate 。 |
password |
否 | 用于访问客户端证书(PFX 文件)的密码 |
pfx |
是 | 客户端证书(PFX 文件)的 base64 编码内容 |
基本身份验证
若要验证从逻辑应用传入 Web 应用或 API 应用的请求,可以使用基本身份验证,如用户名和密码。 虽然基本身份验证是一种常用模式,并且你可以在用来生成你的 Web 应用或 API 应用的任何语言中使用此身份验证,但是在生产方案中,请使用可用的最佳身份验证级别。
重要
为了获得最佳安全性,请尽可能使用具有托管标识的 Microsoft Entra ID 进行身份验证。 此方法提供卓越的安全性,无需提供凭据。 Azure 负责管理此标识并帮助保护身份验证信息的安全,这样你就无需自己管理这种敏感信息了。 若要为 Azure 逻辑应用设置托管标识,请参阅“使用 Azure 逻辑应用中的托管标识对 Azure 资源的访问和连接进行身份验证”。
如果你必须使用其他身份验证类型,请使用可用的下一个最高级别安全选项。 例如,假设你必须改用连接字符串来创建连接。 连接字符串包括你的应用访问特定资源、服务或系统所需的授权信息。 连接字符串中的访问密钥类似于根密码。
在生产环境中,请始终保护凭据、证书、指纹、访问密钥和连接字符串等敏感信息和机密。 确保使用 Microsoft Entra ID 和 Azure 密钥保管库安全存储此类信息。 避免对此信息进行硬编码、与其他用户共享,或以纯文本形式保存在其他人可以访问的任何位置。 如果你认为这些信息可能已泄露,请尽快轮换机密。 有关详细信息,请参阅关于 Azure 密钥保管库。
在“授权”部分中包含以下属性:
{
"type": "Basic",
"username": "<username>",
"password": "<password>"
}
属性 | 必选 | 说明 |
---|---|---|
type |
是 | 要使用的身份验证类型。 对于基本身份验证,该值必须是 Basic 。 |
username |
是 | 要用于身份验证的用户名 |
password |
是 | 要用于身份验证的密码 |
通过代码进行 Microsoft Entra 身份验证
默认情况下,在 Azure 门户中启用的 Microsoft Entra 身份验证不提供细化的授权。 例如,此身份验证将 API 锁定到特定租户,而不是特定用户或应用。
若要通过代码限制 API 访问逻辑应用,请提取具有 JSON Web 令牌 (JWT) 的标头。 检查调用方的标识,并拒绝不匹配的请求。