使用PowerShell创建Azure AD应用注册未自动生成服务主体,如何实现需求
Azure PowerShell等价实现门户自动创建应用、服务主体及角色配置的方案
核心前置说明
你之前执行
New-AzADApplication仅生成应用注册对象、未同步生成服务主体,是因为当前Azure PowerShell Az模块的设计逻辑中,Azure AD应用注册和服务主体是两类独立的目录对象,创建应用时不会隐式自动关联服务主体,需要通过显式命令补全关联逻辑,完全可以实现你提出的两个目标,效果和门户创建应用时的自动逻辑完全一致。
完整实现步骤
- 步骤1:创建Azure AD应用注册
注意旧版本命令中的HomePage、IdentifierUris参数已在新版Az模块中弃用,需替换为对应新参数:
执行完成后,返回对象包含应用的基础属性,其中$app = New-AzADApplication -DisplayName "NewApplication" ` -WebHomePageUrl "http://www.microsoft.com" ` -IdentifierUri "http://NewApplication"AppId为后续关联服务主体的核心标识。 - 步骤2:创建关联服务主体,同步分配Contributor角色、自动生成客户端密钥
该步骤可一步完成服务主体创建、角色分配、密钥生成三个操作,无需拆分执行:
重要提醒:该命令执行完成的当下,会在返回对象中一次性返回生成的客户端密钥明文,后续无论通过门户还是PowerShell重新查询服务主体,都不会再回显明文密钥,必须第一时间记录保存。# 创建与上述应用关联的服务主体,自动分配当前订阅范围的Contributor角色 $sp = New-AzADServicePrincipal -ApplicationId $app.AppId ` -Role "Contributor" ` -SkipAssignment:$false - 步骤3:提取并获取可使用的客户端密钥明文
通过内置命令解密返回的密钥对象,即可得到完整的密钥内容:# 解密获取明文客户端密钥 $clientSecret = $sp.Secret | ConvertFrom-SecureString -AsPlainText # 输出核心应用属性方便后续对接 Write-Host "客户端ID(应用ID):$($app.AppId)" Write-Host "明文客户端密钥:$clientSecret" Write-Host "服务主体对象ID:$($sp.Id)"
关键注意事项
- 执行上述命令的账号,必须同时具备两类权限:Azure AD目录下的应用注册创建权限、当前订阅下的角色分配权限(如订阅所有者、用户访问管理员),否则会触发权限不足报错。
- 默认生成的客户端密钥有效期为2年,可通过命令中的
-StartDate、-EndDate参数自定义密钥的生效、失效时间。 - 默认Contributor角色的分配范围为当前登录的整个订阅,如果需要缩小权限范围到指定资源组或单个资源,可在创建服务主体时通过
-Scope参数指定具体的资源路径。 - 如果本地Az模块版本过低导致参数不兼容,可执行
Update-Module -Name Az -Force升级到最新稳定版本后再执行操作。
内容的提问来源于stack exchange,提问作者nen
相关产品推荐
相关产品推荐

