首页 > 解决方案 > 如何让 Azure 逻辑应用使用其托管服务标识通过连接器进行身份验证?

问题描述

我的 Azure 逻辑应用程序作为托管服务标识运行,我正在尝试使用 Azure AD 连接器作为应用程序的触发器。连接器需要 Azure AD Graph API 的权限,我已通过使用 PowerShell 使用 ClientCredentials 验证为 ServicePrincipal MSI 并调用所需的 Azure AD Graph API 来验证权限是否正确。

但是,我似乎无法告诉我的逻辑应用程序的 Azure AD 连接器(与我可以设置身份验证属性的 REST 调用相反)使用托管服务标识。

由于没有 Microsoft 提供的任何逻辑应用连接器的文档,我无法确定 Azure AD 连接器上是否有一个众所周知的属性,我可以使用它来告诉它如何进行身份验证。我的 ARM 模板中有以下内容,并且猜想有一个 customParameterValue 要设置,但我不知道它是什么。

{
    "type": "Microsoft.Web/connections",
    "name": "[parameters('connections_azuread_name')]",
    "apiVersion": "2016-06-01",
    "location": "eastus",
    "scale": null,
    "properties": {
        "displayName": "Azure AD",
        "customParameterValues": {},
        "api": {
            "id": "[concat('/subscriptions####/providers/Microsoft.Web/locations/eastus/managedApis/', parameters('connections_azuread_name'))]"
        }
    },
    "dependsOn": []
}

标签: azure-active-directoryazure-logic-appsazure-ad-graph-api

解决方案


我知道我参加聚会有点晚了,但是我最近一直在使用托管身份 (MI),并且基本上得出的结论是,它们还没有为主流使用做好准备。它们是一个很棒的概念,我希望它们继续发展,但是诸如大多数连接器还不支持它们的限制,以及每个订阅只能拥有 10 个具有身份的逻辑应用程序的限制,严重限制了它们的使用。

我基本上采用了一个带有 MI 的逻辑应用程序,它根据一些传递的值为服务构建适当的身份验证块,并从 Key Vault 获取机密。每个其他逻辑应用程序都会调用该“身份验证”逻辑应用程序以获取它们应该传递给 API、Azure Functions 等的调用的详细信息。

我还需要 AAD 保护我的所有 Azure Functions,因此 MI 对 LA 能够调用经过身份验证的函数来说非常棒,但同样,Azure Function 操作还不支持 MI(或任何身份验证)。因此,我不得不求助于使用 HTTP 连接器(带有身份验证)来调用 FA。

逻辑应用程序非常接近真棒,令人沮丧的是它们还没有完全实现!

不过,要回答您的问题,我发现某些连接器将接受身份验证块,例如...

{
  "audience": "XXXXXXXXXXXX",
  "type": "ManagedServiceIdentity"
}

推荐阅读