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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:46:00