1

我们有一个作为 Azure 应用服务部署的 Asp.net Core Web API。我们在此应用服务 Web API 上启用了 MSI,以轻松检索 Keyvalut 机密。

现在我们有另一个应用服务将调用上面的 Web API,我们将在 Web API 上启用 AAD 身份验证。

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

4

1 回答 1

2

是的,你可以,你可以参考我关于这个主题的文章:https ://joonasw.net/view/calling-your-apis-with-aad-msi-using-app-permissions 。

您必须在 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"
    }
  ]
}

此处有关权限的更多信息:https ://joonasw.net/view/defining-permissions-and-roles-in-aad 。

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

Connect-AzureAD
New-AzureADServiceAppRoleAssignment -ObjectId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -Id 32028ccd-3212-4f39-3212-beabd6787d81 -PrincipalId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -ResourceId c3ccaf5a-47d6-4f11-9925-45ec0d833dec

ObjectId 和 PrincipalId 都是 MSI 生成的服务主体的 id。Id 是角色/应用权限的 id。ResourceId 是 API 服务主体的 ID。

执行此操作后,您可以使用 API 的托管标识获取令牌,并且该令牌将包含应用程序权限,如"roles": "Things.Read.All".

于 2019-02-21T06:59:18.350 回答