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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:55:10