我正在尝试解决为什么某些自动化任务不适用于我创建的服务主体的问题,尤其是涉及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
答案 0 :(得分:1)
您已经发现,原因是Azure CLI命令az ad app permissions list-grants
仅列出了委派的权限。
如果您还希望获得授予服务主体的应用程序权限,
当前Azure CLI
和Az
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}
}
在门户中的App注册中的权限:
这里是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