使用Microsoft Graph API查找所有已授予管理员同意的应用程序

时间:2020-10-02 01:17:10

标签: azure-active-directory microsoft-graph-api

根据标题,我找不到任何可以明确提供信息的地方,而我最好的猜测就是使用

https://graph.microsoft.com/v1.0/applications

并查看requiredResourceAccess,但这似乎未提供有关实际同意的信息。

此处仅是条目的存在,证明需要管理员同意。我对应用程序添加了权限甚至在获得同意之前,条目都出现在requiredResourceAccess中,并且条目未更改,因此我不会猜测当我同意的时候。

1 个答案:

答案 0 :(得分:1)

如果同意某项申请,则可能会发生三件事:

  1. 如果表示客户端应用程序(已被授予访问权限)的身份,则创建代表客户端应用程序身份的服务主体servicePrincipal)。
  2. 对于向客户端应用程序授予委派权限的每个API,都会创建委派的权限授予oauth2PermissionGrant)。
  3. 对于授予每个仅应用程序权限的客户端应用程序,将创建一个应用程序角色分配 *(appRoleAssignment)。

(取决于应用需要的权限,可能不需要#2或#3。)

那么,“已经向哪些应用程序授予了管理员同意?”可以等同于“存在哪些已授予承租人范围的委托权限或仅应用程序权限的服务主体?”

  1. 列出租户中的所有服务主体:
    8
    
  2. 要获得授予给定服务主体的所有 tenant-wide 委托权限,请执行以下操作:
    GET https://graph.microsoft.com/v1.0/servicePrincipals
    
  3. 要获得授予服务主体的所有应用角色(仅应用权限):
    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants
           ?$filter=clientId eq {id} and consentType eq 'AllPrincipals'
    

要将授予的应用程序角色ID或委派的权限范围值映射到显示名称和描述,您可以在 appRoles oauth2PermissionScopes 集合中查找授予的应用程序角色。在资源服务主体(即代表API的服务主体)上。

这一切都可以使用Azure AD PowerShell完成,并包装到一个函数中以转出委派的和仅限应用程序的权限授予。这是一个示例:Get-AzureADPSPermissions.ps1