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

使用Microsoft.Graph PowerShell模块创建Azure AD应用时无法设置OAuth2权限范围

问题:使用New-MgApplication创建Azure AD应用时,OAuth2权限范围未生效

我尝试用New-MgApplication PowerShell Cmdlet创建Azure AD应用,同时设置OAuth2权限范围。Cmdlet运行正常,应用成功创建,但在Azure门户查看应用设置时,权限范围并未被设置。

我的代码如下:

[Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.MicrosoftGraphWebApplication]$azureAdApiAppWebSettings = @{RedirectUris="http://localhost:4040"}

[Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.IMicrosoftGraphPermissionScope[]]$oauth2PermissionScopes = @(
    @{
        AdminConsentDescription="Access the application as admin.";
        AdminConsentDisplayName="Access as admin";
        Id=[guid]::NewGuid().ToString();
        IsEnabled=$true;
        Origin="Application";
        Type="User";
        UserConsentDescription="Access the application as user.";
        UserConsentDisplayName="Access as user";
        Value="access_as_user"
    }
)

[Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.IMicrosoftGraphApiApplication]$azureAdApiAppApiSettings = @{
    Oauth2PermissionScopes=$oauth2PermissionScopes;
}
$azureAdApiApp = New-MgApplication -DisplayName "MyApplicationName" -SignInAudience "AzureADMyOrg" -Web $azureAdApiAppWebSettings -Api $azureAdApiAppApiSettings

我想知道哪里操作有误?或者是否无法在创建应用时设置权限范围,只能在创建完成后使用Update-MgApplication进行设置?


解决方案

问题原因

你代码中用哈希表直接构造IMicrosoftGraphPermissionScope数组的方式,可能导致PowerShell没有正确将哈希表转换为Graph API要求的强类型对象,最终权限范围参数没有被正确传递到创建请求中。

正确实现方式

创建应用时直接设置OAuth2权限范围是可行的,只需确保构造强类型的权限范围对象,而非仅用哈希表。修改代码如下:

# 构造Web应用设置
$azureAdApiAppWebSettings = @{
    RedirectUris = "http://localhost:4040"
}

# 创建强类型的OAuth2权限范围对象
$permissionScope = New-Object -TypeName Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.MicrosoftGraphPermissionScope
$permissionScope.AdminConsentDescription = "Access the application as admin."
$permissionScope.AdminConsentDisplayName = "Access as admin"
$permissionScope.Id = [guid]::NewGuid().ToString()
$permissionScope.IsEnabled = $true
$permissionScope.Origin = "Application"
$permissionScope.Type = "User"
$permissionScope.UserConsentDescription = "Access the application as user."
$permissionScope.UserConsentDisplayName = "Access as user"
$permissionScope.Value = "access_as_user"

# 构造API应用设置,传入强类型权限范围对象
$azureAdApiAppApiSettings = @{
    Oauth2PermissionScopes = @($permissionScope)
}

# 创建Azure AD应用
$azureAdApiApp = New-MgApplication -DisplayName "MyApplicationName" `
    -SignInAudience "AzureADMyOrg" `
    -Web $azureAdApiAppWebSettings `
    -Api $azureAdApiAppApiSettings

备选方案:创建后更新权限范围

如果上述方式仍有问题,也可以先创建应用,再通过Update-MgApplication添加权限范围:

# 先创建应用
$azureAdApiApp = New-MgApplication -DisplayName "MyApplicationName" `
    -SignInAudience "AzureADMyOrg" `
    -Web $azureAdApiAppWebSettings

# 构造权限范围
$permissionScope = @{
    AdminConsentDescription="Access the application as admin.";
    AdminConsentDisplayName="Access as admin";
    Id=[guid]::NewGuid().ToString();
    IsEnabled=$true;
    Origin="Application";
    Type="User";
    UserConsentDescription="Access the application as user.";
    UserConsentDisplayName="Access as user";
    Value="access_as_user"
}

# 更新应用的权限范围
Update-MgApplication -ApplicationId $azureAdApiApp.Id `
    -Api @{ Oauth2PermissionScopes = @($permissionScope) }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:16