Azure active directory 如何使用MSI从其他应用程序服务调用受AAD保护的应用程序服务Web API

Azure active directory 如何使用MSI从其他应用程序服务调用受AAD保护的应用程序服务Web API,azure-active-directory,azure-managed-identity,Azure Active Directory,Azure Managed Identity,我们将Asp.net核心Web API部署为Azure应用程序服务。我们在这个应用服务Web API上启用了MSI,以便轻松检索Keyvalut机密 现在我们有了另一个应用程序服务,它将调用上述web API,我们将在web API上启用AAD身份验证 我知道我们可以注册AAD应用程序以允许第二个应用程序服务访问Web API,但我想知道我们是否可以在第二个应用程序服务上启用MSI并使用MSI获取Web API的访问令牌? 我可以参考任何文件吗?是的,你可以,你可以参考我关于这个主题的文章: 您

我们将Asp.net核心Web API部署为Azure应用程序服务。我们在这个应用服务Web API上启用了MSI,以便轻松检索Keyvalut机密

现在我们有了另一个应用程序服务,它将调用上述web API,我们将在web API上启用AAD身份验证

我知道我们可以注册AAD应用程序以允许第二个应用程序服务访问Web API,但我想知道我们是否可以在第二个应用程序服务上启用MSI并使用MSI获取Web API的访问令牌?
我可以参考任何文件吗?

是的,你可以,你可以参考我关于这个主题的文章:

您必须在API中定义应用程序权限,然后通过PowerShell或图形API之一将这些权限分配给MSI服务主体

AAD中API应用程序清单中的示例应用程序权限:

{
  "appRoles": [
    {
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "Read all things",
      "id": "32028ccd-3212-4f39-3212-beabd6787d81",
      "isEnabled": true,
      "description": "Allow the application to read all things as itself.",
      "value": "Things.Read.All"
    }
  ]
}
有关权限的详细信息,请单击此处:

然后,您可以通过AAD PowerShell将其分配给服务主体:

连接AzureAD
新AzureADServiceAppRoleAssignment-ObjectId 1606ffaf-7293-4c5b-b971-41ae9122bcfb-Id 32028ccd-3212-4f39-3212-beabd6787d81-Princalid 1606ffaf-7293-4c5b-b971-41ae9122bcfb-ResourceId c3ccaf5a-47d6-4f11-9925-45ec0d833dec
ObjectId和PrincipalId都是MSI生成的服务主体id。id是角色/应用权限的id。ResourceId是API服务主体的id


完成此操作后,您可以使用API的托管标识获取令牌,令牌将包含应用权限,如
“角色”:“Things.Read.All”

非常感谢!因此,我仍然需要为我的Web API注册一个AAD应用程序。因为Web API还启用了MSI。有没有办法在不注册AAD应用程序的情况下直接在MSI上定义权限?没有,您需要为API注册应用程序。谢谢。我试着用MSI搜索调用API,似乎只有你的博客给出了一个可靠的解决方案:)我没有找到任何关于这个解决方案的正式官方文档:(.你能给我指一下你提到的官方文件吗?你可以在文章末尾看到我对这篇文章的引用。但是,这些引用至少在当时没有讨论这个场景。这是我写这篇文章的主要原因。是的,根据我的谷歌搜索结果,你的博客是唯一一个明确给出解决方案的博客,我没有从官方那里得到任何暗示文件。真的很酷的写作!