使用PowerShell为Azure AD应用添加作用域(暴露API)遇只读属性报错
解决方法:操作Application对象而非ServicePrincipal
你遇到的错误是因为ServicePrincipal的oauth2PermissionScopes属性是只读的,这个属性是从对应的Application对象同步过来的,不能直接修改服务主体的该属性,必须通过操作Application对象来添加作用域(对应UI里的“暴露API”功能)。
修正后的脚本可以这样写:
方式1:创建应用时直接添加作用域
$name = "你的应用名称" $description = "应用描述" # 创建应用时同时设置标识符URI和作用域 $app = New-MgApplication -DisplayName $name -SignInAudience "AzureADMyOrg" ` -IdentifierUris @("api://$($app.AppId)") ` -Oauth2PermissionScopes @( @{ AdminConsentDescription = "admin desc" AdminConsentDisplayName = "admin name" Type = "Admin" Value = "Read.all" Id = [guid]::NewGuid() IsEnabled = $true # 必须启用作用域 } ) # 创建服务主体(无需修改oauth2PermissionScopes) $sp = New-MgServicePrincipal -AppId $app.AppId -Notes $description -Tags @("HideApp","WindowsAzureActiveDirectoryIntegratedApp")
方式2:更新已存在的应用添加作用域
如果应用已经创建,用Update-MgApplication来添加作用域(注意保留原有作用域,避免覆盖):
$appId = "你的应用ID" $newScope = @{ AdminConsentDescription = "admin desc" AdminConsentDisplayName = "admin name" Type = "Admin" Value = "Read.all" Id = [guid]::NewGuid() IsEnabled = $true } # 获取现有应用的作用域列表 $existingApp = Get-MgApplication -ApplicationId $appId $updatedScopes = $existingApp.Oauth2PermissionScopes + $newScope # 更新应用的作用域 Update-MgApplication -ApplicationId $appId -Oauth2PermissionScopes $updatedScopes
当你更新Application的oauth2PermissionScopes后,对应的ServicePrincipal的该属性会自动同步,不需要手动修改服务主体。
内容的提问来源于stack exchange,提问作者Bridystone
相关产品推荐
相关产品推荐

