如何通过Microsoft Graph直接查询Azure AD中分配给用户的企业应用列表
获取Azure AD指定用户分配的企业应用列表解决方案
是否有直接调用的API
目前Microsoft Graph没有单步直接返回关联企业应用(application对象)的接口,但可以通过扩展参数优化请求流程,将原有的三次请求合并为单次调用,不需要分步查询。
原流程说明(你当前使用的步骤逻辑正确,可优化)
你当前的三步调用逻辑是符合Graph接口设计的:
- 调用
/users/{userId}/appRoleAssignments接口获取用户分配的所有服务主体关联关系 - 调用
/servicePrincipals?$filter=id eq {servicePrincipalId1} or id eq {servicePrincipalId2}接口获取服务主体的appId等属性 - 调用
/applications?$filter=appId eq '{appId1}' or appId eq '{appId2}'接口获取最终的企业应用详情
该流程的问题在于请求次数多,当用户分配的应用数量较多时,filter参数拼接的id过多会触发URL长度限制,调用效率低。
优化后的调用方案
通过Graph的$expand导航属性扩展,可以直接在单次请求中拿到所有需要的企业应用信息:
GET https://graph.microsoft.com/v1.0/users/{userId}/appRoleAssignments?$expand=resource($expand=application;$select=id,appId,displayName)
返回结果说明
- 外层
appRoleAssignments为用户的所有应用分配记录 resource字段对应分配的服务主体对象,包含服务主体的id、appId、显示名resource/application字段即为你需要的企业应用(application对象)详情,为空的记录对应的是微软内置服务主体,可直接过滤掉
权限要求
调用该接口需要持有以下任意一种Graph权限:
- 委托权限:
Application.Read.All、Directory.Read.All - 应用权限:
Application.Read.All、Directory.Read.All
内容的提问来源于stack exchange,提问作者abhinav3414
相关产品推荐
相关产品推荐

