“ az广告应用程序权限列表授予”与Azure门户中为该应用程序列出的内容不匹配

时间:2019-07-05 17:39:22

标签: azure powershell azure-cli

我正在尝试解决为什么某些自动化任务不适用于我创建的服务主体的问题,尤其是涉及Azure Active Directory的任何任务。 Azure门户似乎清楚地表明服务主体已被授予Microsoft.Graph Directory.Read.All API权限。该门户网站还显示该服务主体也具有User.Read权限。

但是,当我为服务主体运行az ad app permission list-grants时,它仅列出User.Read。这使我想知道Directory.Read.All权限是否实际存在。是的,门户网站清楚地表明已授予Directory.Read.All权限。

如何确认我的服务主体确实具有Directory.Read.All API权限?

 az ad app permission list-grants --id db7a66b4-06ad-4412-9bbc-73cb34f96ce2 --show-resource-name
[
  {
    "clientId": "01b359a2-f452-43c6-b290-e5ea1b359f38",
    "consentType": "AllPrincipals",
    "expiryTime": "2019-12-08T17:07:04.550141",
    "objectId": "olmzAVL0xkOykOXqGzWfOAvNygY8CKVIummKcmVpwq8",
    "odatatype": null,
    "principalId": null,
    "resourceDisplayName": "Microsoft Graph",
    "resourceId": "06cacd0b-083c-48a5-ba69-8a726569c2af",
    "scope": "User.Read",
    "startTime": "0001-01-01T00:00:00"
  }
]

然后粗略地回顾一下我在Azure Active Directory>应用程序注册>(服务主体名称)> API权限下在此服务主体的门户中看到的内容

API/Permissions name   Type         Admin Consent Required
--------------------   -----------  ----------------------------------- 
Microsoft Graph (2)
   Directory.Read.All  Application  Yes <green check> Granted for MyOrg
   User.Read           Delegated        <green check> Granted for MyOrg

3 个答案:

答案 0 :(得分:1)

您已经发现,原因是Azure CLI命令az ad app permissions list-grants仅列出了委派的权限。

如果您还希望获得授予服务主体的应用程序权限,  当前Azure CLIAz powershell模块不支持它,您需要使用AzureAD powershell模块。

尝试如下所示的脚本,它会写输出API名称和相应的权限。

注意,第一行中的ObjectId是服务主体的ObjectId,而不是AD App(应用程序注册),您可以在以下位置的Enterprise applications中找到它:门户网站(使用All applications进行过滤)。

$apppermissions = Get-AzureADServiceAppRoleAssignedTo -ObjectId <ObjectId of your service principal>
foreach($item in $apppermissions){
    $item.ResourceDisplayName
    (Get-AzureADServicePrincipal -ObjectId $item.ResourceId).AppRoles | Where-Object {$_.Id -eq $item.Id}    
}

enter image description here

在门户中的App注册中的权限:

enter image description here

这里是similar issue,您也可以看看。

答案 1 :(得分:0)

我终于弄清楚了,而且还不那么明显。

az ad app permissions list-grants列出oauth2权限。换句话说,就是委托权限。

我的服务主体的Directory.Read.All权限是 application 权限。这意味着这是我的服务负责人自己拥有的权限,而无需其他用户的身份验证令牌。

我仍在尝试找出如何使用新的az命令和/或新的Get-Az PowerShell模块列出应用程序权限。如果我知道如何更新此答案。

答案 2 :(得分:0)

我发现您可以使用 az cli 获得该输出,但使用 rest 命令如下:

az rest --method get --url https://graph.microsoft.com/v1.0/servicePrincipals/{YOUR_SERVICE_PRINCIPAL_ID}/appRoleAssignments