【问题标题】:Authenticate from Azure Logic app to Azure Function using Managed Identity使用托管标识从 Azure Logic 应用向 Azure Function 进行身份验证
【发布时间】:2025-12-26 10:45:11
【问题描述】:

我正在尝试为逻辑应用和 Azure 函数配置安全性。 Azure 函数有一个 HTTP 触发器。到目前为止,我已经完成了以下工作:

  1. 创建了具有一些基本功能的 Azure 函数(在请求中写入查询以记录)。
  2. 创建了逻辑应用(循环触发器,HTTP 触发 Azure 函数)
  3. 测试逻辑应用成功调用 Azure Function
  4. 向逻辑应用添加了托管标识
  5. 在 Azure Function App 上启用 Azure AD 身份验证/授权,并使用在 Azure AD 中为 Function App 创建应用注册的快速配置。
  6. 在逻辑应用的 HTTP 操作中添加了托管标识作为身份验证方法。

当我运行逻辑应用程序时,它显示 HTTP 操作失败,因为它未经授权。谁能告诉我我错过了什么?我找到了一些关于如何使用类似方法访问 KeyVault(例如)的教程,但对于 Azure 函数却没有。我觉得我需要告诉应用注册逻辑应用的托管标识具有权限,但我不知道这是否正确,也不知道该怎么做。

【问题讨论】:

  • 请看一下这个线程。*.com/questions/55407966/… ..我已经回答了两种可能的方法,其中第二种更具声明性。此外,在尝试从 Logic App 进行身份验证时,请确保在 HTTP Action for Logic App 中输入正确的受众值(它应该是 Azure Function 的 Azure AD 应用注册中的 APP ID URI。您可以找到 APP ID URI来自门户网站..i.stack.imgur.com/rqvUG.png)
  • 嗨@RohitSaigal 感谢您的回复。在清单内的 JSON 中,id 应该输入什么值(你有 fc80341...)?
  • 不客气。它可以是任何唯一的 GUID。你可以创建一个新的。你基本上是在定义一个新角色并给它一个标识符。

标签: azure azure-active-directory azure-functions azure-logic-apps


【解决方案1】:

首先,要克服逻辑应用调用 Azure 函数时当前遇到的未经授权的错误,您需要确保逻辑应用正在获取令牌以正确地对函数进行身份验证。

我很快试用了一个具有托管标识的逻辑应用,例如您的设置,以调用启用了 Azure AD 身份验证的 Azure 函数。以下是要遵循的详细步骤。

  1. 在您的逻辑应用中添加一个 HTTP 操作,用于调用您的 Azure 函数
  2. 就我而言,这是一个简单的 GET 调用,其 URL 类似于 https://<myfunctionapp>.azurewebsites.net/api/simplefunction
  3. 在身份验证中选择Managed Identity
  4. 然后添加新参数并选中Audience复选框

  5. Audience 参数的值更改为函数应用的 Azure AD 应用注册的 APP ID URI。在我的例子中,这个值看起来像 https://<myazureadtenant>.onmicrosoft.com/GUID

    您可以从 Azure 门户 > Azure AD > 应用注册 > 函数应用注册 > 设置 > 属性中找到此 APP ID URI 值

此时,您应该能够测试您的逻辑应用并至少可以正常调用 Azure 函数(除非您的 Azure 函数仅限于某些调用者或需要特定权限,稍后会详细介绍。)

在我的例子中,完整的 HTTP 操作如下所示。

接下来,一旦从逻辑应用(使用托管标识)到您的 Azure 函数的基本调用得到正确身份验证,问题是任何应用程序都应该能够调用您的 Azure 函数,还是只允许某些具有特定权限的调用者。

我在这篇 SO 帖子 - Is there a way to secure an Azure Function that will only be called from a specific Azure Logic App? 中用 2 种方法详细回答了这一部分。该答案中的第二种方法是非常声明性的,如果您的函数需要,您甚至可以为不同类型的调用者创建多个不同的应用程序角色。

【讨论】:

  • 感谢 Rohit,但我仍然遇到问题。按照您的说明进行操作后,我检查了从匿名浏览器会话访问我的 AZ 功能,我仍然可以访问它。还使用我的逻辑应用程序进行了测试,它也访问了该功能。然后我将 AZ 函数集成授权级别更改为函数(匿名)。我不再能够使用匿名 Web 会话或从 Logic App 中访问该功能。逻辑应用现在再次失败,显示未经授权。有什么建议吗?