使用托管身份从Azure Logic应用验证到Azure功能

时间:2019-04-18 04:50:47

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

我正在尝试为Logic App和Azure Function配置安全性。 Azure函数具有一个HTTP触发器。到目前为止,我已经执行了以下操作:

  1. 使用一些基本功能创建了Azure功能(在请求登录时写入查询)。
  2. 创建了逻辑应用程序(重复触发,用于触发Azure功能的HTTP)
  3. 测试Logic App已成功调用Azure函数
  4. 向逻辑应用添加了托管身份
  5. 在Azure Function App上启用Azure AD身份验证/授权,并使用快速配置,该配置在Azure AD中为Function App创建了App Registration。
  6. 在Logic App的HTTP操作中添加了托管身份作为身份验证方法。

当我运行Logic App时,它表明HTTP操作失败,因为它是未经授权的。谁能告诉我我所缺少的吗?我已经找到了一些有关如何使用类似方法访问KeyVault的教程,但是对于Azure Function则没有。我觉得我需要告诉应用程序注册该逻辑应用程序的托管身份具有权限,但我不知道这是否正确,也不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

  

当我运行Logic App时,它表明HTTP操作失败,因为   它是未经授权的。谁能告诉我我想念的东西吗?

首先,要克服Logic App调用Azure函数时当前遇到的未授权错误,您需要确保Logic App正在获取令牌以正确验证功能。

我很快尝试了具有托管身份的逻辑应用程序(如您的设置)来调用启用了Azure AD身份验证的Azure功能。这是要执行的详细步骤。

  1. 在逻辑应用中添加一个HTTP操作,该操作将用于调用Azure函数
  2. 在我的情况下,这是一个简单的GET呼叫,其网址类似https://<myfunctionapp>.azurewebsites.net/api/simplefunction
  3. 在“身份验证”中选择Managed Identity
  4. 然后添加新参数并选中Audience复选框

    enter image description here

  5. Audience参数的值更改为您的功能应用程序的Azure AD应用程序注册的APP ID URI。就我而言,该值看起来像https://<myazureadtenant>.onmicrosoft.com/GUID

    您可以从Azure门户> Azure AD>应用程序注册>功能应用程序的注册>设置>属性中找到此APP ID URI值

    enter image description here

在这一点上,您应该能够测试您的逻辑应用程序,并且至少可以调用Azure Function正常(除非您的Azure Function仅限于某些调用者或需要特定权限,否则将对此进行更多介绍。)

这是我的情况下完整HTTP动作的外观。

enter image description here

接下来,一旦从Logic App(具有托管身份)到您的Azure Function的基本调用得到正确的身份验证,问题就是任何应用程序都可以调用Azure Function或仅允许具有特定权限的某些调用者。

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