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

如何使用PowerShell在Azure应用中添加多个委派权限?

解决Azure应用注册添加委派权限时覆盖已有权限的问题

问题出在Set-AzureADApplication的-RequiredResourceAccess参数是完全替换应用的现有权限配置,而非追加。每次调用原函数时,都会把之前设置的权限全部覆盖,只保留当前调用的权限。

修改方案:先获取现有权限,再追加新权限

要实现新增权限而不覆盖,需要先读取应用当前已有的权限配置,在这个基础上添加新权限,最后再整体提交更新。

以下是修改后的完整脚本:

$graph = "00000003-0000-0000-c000-000000000000"
$sharePoint = "00000003-0000-0ff1-ce00-000000000000"
$userRead = "e1fe6dd8-ba31-4d61-89e7-88639da4683d"
$myFilesWrite = "2cfdc887-d7b4-4798-9b33-3d98d6b95dd2"
$allSitesWrite = "640ddd16-e5b7-4d71-9690-3f4022699ee7"

Function AddDelegatedPermission($appObjectId, $resourceId, $permissionId)
{
    # 获取应用当前的权限配置
    $app = Get-AzureADApplication -ObjectId $appObjectId
    $existingPermissions = $app.RequiredResourceAccess

    # 查找是否已存在对应资源的权限组
    $resourcePermissionGroup = $existingPermissions | Where-Object { $_.ResourceAppId -eq $resourceId }

    # 创建新的委派权限对象
    $newPermission = New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList $permissionId, "Scope"

    if ($resourcePermissionGroup) {
        # 检查权限是否已存在,避免重复添加
        if (-not ($resourcePermissionGroup.ResourceAccess | Where-Object { $_.Id -eq $permissionId })) {
            $resourcePermissionGroup.ResourceAccess += $newPermission
        }
    } else {
        # 若对应资源无权限组,新建一个并加入现有列表
        $newPermissionGroup = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
        $newPermissionGroup.ResourceAppId = $resourceId
        $newPermissionGroup.ResourceAccess = @($newPermission)
        $existingPermissions += $newPermissionGroup
    }

    # 提交完整的权限列表,替换原有配置
    Set-AzureADApplication -ObjectId $appObjectId -RequiredResourceAccess $existingPermissions
}

# 依次添加三个委派权限
AddDelegatedPermission $myApp.ObjectId $graph $userRead
AddDelegatedPermission $myApp.ObjectId $graph $myFilesWrite
AddDelegatedPermission $myApp.ObjectId $sharePoint $allSitesWrite

关键说明:

  1. 读取现有权限:每次添加前先通过Get-AzureADApplication获取应用当前的所有权限配置,确保不会丢失已设置的权限。
  2. 权限分组管理:同一资源(如Microsoft Graph)的权限会被归到同一个RequiredResourceAccess对象下,新增权限时直接追加到该组。
  3. 重复检查:添加前先判断权限是否已存在,避免重复添加相同权限。
  4. 整体提交更新:最后用包含所有权限的完整列表调用Set-AzureADApplication,确保所有权限都被保留。

内容的提问来源于stack exchange,提问作者user1176737

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:30:59