将自定义角色分配给 Azure Active Directory 系统托管标识

Tau*_*qir 1 azure-active-directory azure-managed-identity

为了在 API 之间建立 Azure AD 系统托管标识,我在应用程序清单中为目标 API 定义了一个自定义角色。

"appRoles": [
    {
        "allowedMemberTypes": [
            "Application"
        ],
        "description": "Allow the application to read all things as itself.",
        "displayName": "Read all things",
        "id": "86a914fa-a862-4962-9975-be5c9a05dca3",
        "isEnabled": true,
        "lang": null,
        "origin": "Application",
        "value": "Things.Read.All"
    }
Run Code Online (Sandbox Code Playgroud)

现在,我想将此角色分配给要调用它的 api,以便我可以在从 AzureServiceTokenProvider 收到的访问令牌中验证它。问题是我在应用程序注册中没有看到系统分配的身份。

身份(声明系统分配身份的位置)“Azure 角色分配”下有一个按钮,可用于添加角色分配。此处有可用的角色列表。我正在寻找我定义的自定义角色,它不在下拉列表中。

如何将定义的角色分配给系统身份,以便它可以访问允许的 api 或其他 api?我希望在访问令牌中获得此角色。这是正确的期望吗?

All*_* Wu 5

您定义的是应用程序角色。但“Azure角色分配”用于分配订阅角色。它们完全是两个不同的东西。

您可以使用 Microsoft Graph API 将appRoleAssignment 授予服务主体

POST https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
Content-Type: application/json
Content-Length: 110

{
  "principalId": "principalId-value",
  "resourceId": "resourceId-value",
  "appRoleId": "appRoleId-value"
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,{id}{resourceId-value}都是资源服务主体的对象 ID,资源服务主体是与您在其中创建 appRoles 的 Azure AD 应用程序关联的企业应用程序。您可以这样找到它:

在此输入图像描述

在此输入图像描述

并且{principalId-value}将是 Azure 资源托管标识的 ID。在这里找到它:

在此输入图像描述

{appRoleId-value}是您在清单中创建的应用程序角色的 ID。

在此输入图像描述

您可以使用管理员帐户登录Microsoft Graph Explorer来调用 Microsoft Graph API。

如果要验证结果是否成功,请导航到Azure 门户-> Azure Active Directory ->企业应用程序->所有应用程序。输入 Azure 资源的名称。

在此输入图像描述

然后你会发现app角色(应用程序权限)已经被授予。

在此输入图像描述