在Azure中需要什么权限才能授予对托管身份的访问权限以调用自定义api

时间:2020-08-05 02:39:33

标签: azure azure-active-directory azure-managed-identity

我想将在我的应用程序注册中创建的Things.Reead.All角色分配给托管身份。 应用程序注册SP对象ID为8055e1eb-0000-0000-9b77-00000000000 角色定义如下:

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

关于系统分配的受管身份的唯一已知信息是其对象ID,例如

aad300-0872-0000-811d-00000000000

,并且我希望允许它调用应用程序8055e1eb-0000-0000-9b77-00000000000,该应用程序希望看到访问令牌中的角色。 我知道我必须使用以下api来做到这一点。

https://graph.microsoft.com/v1.0/servicePrincipals/8055e1eb-0000-0000-9b77-00000000000/appRoleAssignedTo
{
  "principalId": "aad300-0872-0000-811d-00000000000",
  "resourceId": "8055e1eb-0000-0000-9b77-00000000000",
  "appRoleId": "86a914fa-a862-4962-9975-000000000000"
}

我的租户访问范围广泛但受到控制。当我从

获取令牌时
az account get-access-token --resource https://graph.microsoft.com

打电话给我,我得到

    "code": "Authorization_RequestDenied",
    "message": "Insufficient privileges to complete the operation.",

我需要弄清楚进行此调用所需的确切特权。

1 个答案:

答案 0 :(得分:1)

因为您没有回答我的评论,所以我只能给您我自己的解决方案,该解决方案使用服务主体登录azure cli,它对我有用。

请按照以下步骤操作。

1。Create a new App Registration in azure ad,然后是get values for signing increate a new application secret

2。导航至应用程序的API permissions,添加Directory.ReadWrite.All Application权限(不是委托的权限)Microsoft Graph,不要忘记最后点击Grant admin consent for xxx按钮。

注意:从doc开始,AppRoleAssignment.ReadWrite.All权限就足够了,但是根据我的测试,它将无法正常工作,不确定是否是bug,我有对该令牌进行解码,则该令牌具有AppRoleAssignment.ReadWrite.All权限。

enter image description here

enter image description here

3。在azure cli中,运行以下命令以获取令牌。

az account clear
az login --service-principal --allow-no-subscriptions --username '<application-id>' --password '<application secret>' --tenant '<tenant-id>'
az account get-access-token --resource https://graph.microsoft.com

4。我测试了令牌以调用api-Grant an appRoleAssignment for a service principal来为我的功能应用的系统分配的身份授予应用角色,效果很好。

enter image description here

在门户中检查它:

enter image description here