PowerShell查询Service Principal委托权限返回空白结果求助
核心错误原因
你命令返回空结果的根本原因是传入的ID类型不匹配:Get-AzureADOAuth2PermissionGrant 结果中的ClientId字段,对应的是服务主体(Enterprise Application/企业应用)的Object ID,而非你在「应用注册」页面看到的App Registration对象的Object ID,也不是应用的Application (Client) ID。
Azure AD里应用注册和对应的本地租户服务主体是两个独立的目录对象,二者Object ID完全不同:应用注册是全局的应用配置模板,服务主体是该应用在当前租户下的实例化身份,所有权限授权记录都是绑定在服务主体上的,直接传应用注册的Object ID自然匹配不到任何数据。
修复步骤
- 先获取正确的服务主体Object ID
两种方式都可以拿到:- 门户操作:在你截图的应用注册概述页,找到「本地目录中的托管应用程序」入口点击跳转,进入关联的企业应用页面,该页概述里展示的Object ID就是需要的正确值。
- PowerShell查询:把命令里的
your_application_client_id换成你应用注册页的Application (Client) ID(即你平时做登录配置用的那个客户端GUID):# 获取对应服务主体对象 $servicePrincipal = Get-AzureADServicePrincipal -Filter "AppId eq 'your_application_client_id'" # 输出正确的服务主体Object ID $servicePrincipal.ObjectId
- 用拿到的服务主体Object ID替换原命令里的查询值,即可拉取到所有已配置的委托权限授权记录:
Get-AzureADOAuth2PermissionGrant | Where-Object { $_.ClientId -eq $servicePrincipal.ObjectId } | Select-Object *
额外注意事项
- 旧版AzureAD模块已经正式停止支持,长期使用建议迁移到Microsoft Graph PowerShell模块,对应查询命令如下:
# 先导入Graph模块并选择对应权限范围 Connect-MgGraph -Scopes "Directory.Read.All" # 查询指定服务主体的委托权限授权 Get-MgOauth2PermissionGrant -Filter "clientId eq '$($servicePrincipal.Id)'" - 如果替换正确ID后依然查不到部分权限,检查是否是用户级别的动态同意授权:这类授权是绑定到具体用户ID的,不会出现在服务主体级的全局授权列表里,需要加
ConsentType字段做过滤查询。
内容的提问来源于stack exchange,提问作者Mahesh3143
相关产品推荐
相关产品推荐

