使用PowerShell配置Azure应用Office 365管理API权限遇阻求助
解决方案
1. 修正Update-MgApplication的参数格式
RequiredResourceAccess参数接受数组类型,而非单个哈希表。你的代码中直接传递单个哈希表会导致命令执行失败,需要用@()将其包裹为数组。
2. 区分权限类型(应用权限/委派权限)
Office 365 Management API的权限分为两种类型,需根据需求选择正确的获取方式:
- 应用权限:从
$office365ServicePrincipal.AppRoles中获取,Type设为"Role" - 委派权限:从
$office365ServicePrincipal.Oauth2PermissionScopes中获取,Type设为"Scope"
完整修正后的代码(以应用权限为例)
$appName = "test for office 365" # 创建应用注册和服务主体 $App = New-MgApplication -DisplayName $AppName New-MgServicePrincipal -AppId $App.AppId $app = Get-MgApplication -Filter "DisplayName eq '$appName'" $office365AppId = "c5393580-f805-4401-95e8-94b7a6ef2fc2" $office365ServicePrincipal = Get-MgServicePrincipal -Filter "appId eq '$office365AppId'" -ErrorAction Stop $appServicePrincipal = Get-MgServicePrincipal -Filter "DisplayName eq '$appName'" $resourceAccessOffice365 = @() $Office365Scopes = @('ActivityFeed.Read') foreach($scope in $Office365Scopes) { # 应用权限从AppRoles集合获取 $permission = $office365ServicePrincipal.AppRoles | Where-Object { $_.Value -eq $scope } if ($permission) { $resourceAccessOffice365 += @{ Id = $permission.Id; Type = "Role"} } else { Write-Host -ForegroundColor Red "Invalid scope:" $scope Exit } } # 修正RequiredResourceAccess为数组格式 Update-MgApplication -ApplicationId $app.Id -RequiredResourceAccess @( @{ ResourceAppId = $office365AppId ResourceAccess = $resourceAccessOffice365 } ) -ErrorAction Stop # 应用权限需添加角色分配(管理员同意后生效) foreach($permission in $resourceAccessOffice365) { New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $appServicePrincipal.Id ` -PrincipalId $appServicePrincipal.Id ` -ResourceId $office365ServicePrincipal.Id ` -AppRoleId $permission.Id }
3. 委派权限的代码调整
如果需要添加的是委派权限,只需修改权限获取逻辑:
foreach($scope in $Office365Scopes) { # 委派权限从Oauth2PermissionScopes集合获取 $permission = $office365ServicePrincipal.Oauth2PermissionScopes | Where-Object { $_.Value -eq $scope } if ($permission) { $resourceAccessOffice365 += @{ Id = $permission.Id; Type = "Scope"} } else { Write-Host -ForegroundColor Red "Invalid scope:" $scope Exit } }
委派权限配置后,需管理员同意才能生效,可通过以下PowerShell命令完成(需全局管理员权限):
New-MgOauth2PermissionGrant ` -ClientId $appServicePrincipal.Id ` -ConsentType "AllPrincipals" ` -ResourceId $office365ServicePrincipal.Id ` -Scope ($Office365Scopes -join " ")
关键说明
Update-MgApplication命令本身支持配置任意API的权限,并非仅适用于Graph API,问题出在参数格式和权限类型的处理上。- 应用权限需通过
New-MgServicePrincipalAppRoleAssignment完成分配,委派权限需管理员同意后才能被应用使用。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

