迁移至Az模块后,如何用PowerShell启用oauth2AllowImplicitFlow?
问题:Az模块PowerShell中如何启用应用注册的隐式授权?
我正从AzureAD模块迁移至Az模块PowerShell命令,用于创建应用注册并启用隐式授权,但发现Az模块的New-AzADApplication不支持oauth2AllowImplicitFlow参数。
原AzureAD模块脚本
Connect-AzureAD -TenantId <<TenantId>> $appName = "<<AppName>>" $redirectUris = @("https://mspmecloud.onmicrosoft.com/$appName") $secretName = "secretKey" $App = (New-AzureADApplication -DisplayName $appName ` -ReplyUrls $redirectUris ` -Homepage "https://mspmecloud.onmicrosoft.com/$appName" ` -IdentifierUris "https://mspmecloud.onmicrosoft.com/$appName"` -Oauth2AllowImplicitFlow $true -PublicClient $false ) New-AzureADServicePrincipal -AccountEnabled $true -AppId $App.AppId -DisplayName $appName
现有Az模块脚本
$appName = "<<AppName>>" $redirectUris = @("https://mspmecloud.onmicrosoft.com/$appName") $secretName = "secretKey" $App = (New-AzADApplication -DisplayName $appName ` -ReplyUrls $redirectUris ` -Homepage "https://mspmecloud.onmicrosoft.com/$appName" ` -IdentifierUris "https://mspmecloud.onmicrosoft.com/$appName"` ) New-AzADServicePrincipal -ApplicationId $App.AppId
需要通过脚本实现隐式授权及公开API配置,请问Az模块中有什么替代方法?
解决方案
Az模块的New-AzADApplication确实没有直接对应oauth2AllowImplicitFlow的参数,你可以通过以下两种方式实现需求:
方法1:使用Update-AzADApplication修改应用属性
创建应用后,调用Update-AzADApplication启用隐式授权,并配置公开API的权限范围:
# 创建应用 $appName = "<<AppName>>" $redirectUris = @("https://mspmecloud.onmicrosoft.com/$appName") $identifierUri = "https://mspmecloud.onmicrosoft.com/$appName" $App = New-AzADApplication -DisplayName $appName ` -ReplyUrls $redirectUris ` -Homepage "https://mspmecloud.onmicrosoft.com/$appName" ` -IdentifierUris $identifierUri # 启用隐式授权(允许ID令牌和访问令牌) Update-AzADApplication -ApplicationId $App.Id ` -Oauth2AllowImplicitFlow $true ` -Oauth2AllowIdTokenImplicitFlow $true ` -Oauth2AllowAccessTokenImplicitFlow $true # 配置公开API的权限范围 $permissionScope = @{ Id = [Guid]::NewGuid().ToString() Value = "user_impersonation" Type = "User" AdminConsentDisplayName = "允许用户模拟" AdminConsentDescription = "允许应用代表用户访问资源" UserConsentDisplayName = "允许用户模拟" UserConsentDescription = "允许应用代表您访问资源" IsEnabled = $true } Update-AzADApplication -ApplicationId $App.Id ` -Oauth2PermissionScope @($permissionScope) # 创建服务主体 New-AzADServicePrincipal -ApplicationId $App.AppId -AccountEnabled $true
方法2:调用Microsoft Graph API(更灵活)
如果需要更精细的配置,可以直接调用Microsoft Graph接口修改应用属性:
# 连接Az账号并获取Graph访问令牌 Connect-AzAccount -TenantId <<TenantId>> $token = (Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com").Token # 创建应用 $appName = "<<AppName>>" $redirectUris = @("https://mspmecloud.onmicrosoft.com/$appName") $identifierUri = "https://mspmecloud.onmicrosoft.com/$appName" $App = New-AzADApplication -DisplayName $appName ` -ReplyUrls $redirectUris ` -Homepage "https://mspmecloud.onmicrosoft.com/$appName" ` -IdentifierUris $identifierUri # 构造请求体,包含隐式授权和公开API配置 $body = @{ oauth2AllowImplicitFlow = $true oauth2AllowIdTokenImplicitFlow = $true oauth2AllowAccessTokenImplicitFlow = $true api = @{ oauth2PermissionScopes = @( @{ id = [Guid]::NewGuid().ToString() value = "user_impersonation" type = "User" adminConsentDisplayName = "允许用户模拟" adminConsentDescription = "允许应用代表用户访问此应用的资源" userConsentDisplayName = "允许用户模拟" userConsentDescription = "允许应用代表您访问此应用的资源" isEnabled = $true } ) } } | ConvertTo-Json # 调用Graph API更新应用 Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/applications/$($App.Id)" ` -Method PATCH ` -Headers @{Authorization = "Bearer $token"} ` -Body $body ` -ContentType "application/json" # 创建服务主体 New-AzADServicePrincipal -ApplicationId $App.AppId -AccountEnabled $true
内容的提问来源于stack exchange,提问作者Diwakar Reddy
相关产品推荐
相关产品推荐

