如何通过PowerShell将权限添加至Azure AD应用的已配置权限
问题原因及解决办法
原因
- 未同步应用注册的权限请求配置:Azure门户的「已配置权限」列表是从应用注册的
requiredResourceAccess属性读取的,该属性记录了应用主动请求的权限。你直接通过New-MgServicePrincipalAppRoleAssignment创建了权限授予(应用角色分配),但未将该权限添加到应用注册的请求列表中,导致门户无法识别为「已配置权限」,只能归类到「其他权限」。 - 混淆权限请求与权限授予的关系:应用注册的「已配置权限」对应请求的权限,而应用角色分配是实际授予的权限,两者需要同步才能在门户UI中正确关联显示。
解决办法
需分两步操作:先将权限添加到应用注册的请求列表,再完成权限授予。以下是完整的PowerShell命令:
步骤1:获取目标权限及相关对象
# 获取Microsoft Graph服务主体 $GraphServicePrincipal = Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'" # 筛选出User.ReadWrite.All的应用权限ID $AppRole = $GraphServicePrincipal.AppRoles | Where-Object {$_.Value -eq "User.ReadWrite.All" -and $_.AllowedMemberTypes -contains "Application"}
步骤2:更新应用注册的权限请求配置
# 替换为你的应用客户端ID $clientId = "你的应用客户端ID" $application = Get-MgApplication -ApplicationId $clientId # 检查是否已存在对Microsoft Graph的权限请求条目 $existingResourceAccess = $application.RequiredResourceAccess | Where-Object {$_.ResourceId -eq $GraphServicePrincipal.Id} if ($existingResourceAccess) { # 追加新权限到现有请求 $existingResourceAccess.ResourceAccess += @{ Id = $AppRole.Id Type = "Role" # 应用权限用"Role",委派权限用"Scope" } } else { # 创建新的权限请求条目 $newResourceAccess = @{ ResourceId = $GraphServicePrincipal.Id ResourceAccess = @( @{ Id = $AppRole.Id Type = "Role" } ) } $application.RequiredResourceAccess += $newResourceAccess } # 保存应用注册的更新 Update-MgApplication -ApplicationId $application.Id -RequiredResourceAccess $application.RequiredResourceAccess
步骤3:创建应用角色分配完成权限授予
# 获取应用对应的服务主体 $servicePrincipal = Get-MgServicePrincipal -Filter "appId eq '$clientId'" # 构造权限授予参数 $params = @{ principalId = $servicePrincipal.Id resourceId = $GraphServicePrincipal.Id appRoleId = $AppRole.Id } # 执行权限授予 New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $params.principalId -BodyParameter $params
执行完成后刷新Azure门户的应用注册「API权限」页面,即可看到User.ReadWrite.All权限显示在「已配置权限」中,且状态为「已授予」。
注意事项
- 执行命令需要拥有应用程序管理员或全局管理员权限。
- 若要添加委派权限,需将
Type改为"Scope",并筛选AllowedMemberTypes包含"User"的权限ID。
内容的提问来源于stack exchange,提问作者user23162289
相关产品推荐
相关产品推荐

