You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell将权限添加至Azure AD应用的已配置权限

问题原因及解决办法

原因

  1. 未同步应用注册的权限请求配置:Azure门户的「已配置权限」列表是从应用注册的requiredResourceAccess属性读取的,该属性记录了应用主动请求的权限。你直接通过New-MgServicePrincipalAppRoleAssignment创建了权限授予(应用角色分配),但未将该权限添加到应用注册的请求列表中,导致门户无法识别为「已配置权限」,只能归类到「其他权限」。
  2. 混淆权限请求与权限授予的关系:应用注册的「已配置权限」对应请求的权限,而应用角色分配是实际授予的权限,两者需要同步才能在门户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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:24:58