当我尝试运行下面的代码时
$ServicePrincipalName = "MY SPN name"
$ScopeSubscriptionId = "Subscription ID"
$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com" -ErrorAction Stop
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
我无法从“$sp”对象中检索 secret 属性。我完全知道它是 secret 字符串,应该像这样访问:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret)
$UnsecureSecret = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
当我从第二行删除 ApplicationId 参数时,一切正常。
$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
有什么想法为什么会这样吗?尽管我观察到这种行为是在最近几天发生的。
最佳答案
因为当您使用以下两个命令时,它不会自动为您创建 key 。
$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com" -ErrorAction Stop
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
您也可以在门户中查看:
当您使用不带-ApplicationId
的命令创建服务主体时,它会创建一个服务主体以及一个AD应用程序(应用程序注册),并且还会自动为您创建一个 secret .
$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop
在门户中检查:
<小时/>如果您想使用带有-ApplicationId
的命令,您可以手动为您的AD应用程序创建一个 secret ,您可以使用 New-AzADAppCredential
,您可以自己设置 secret 值,在我的示例中, secret 是password01!
。
$AzureAdApplication = New-AzADApplication -DisplayName $ServicePrincipalName -HomePage "https://$ServicePrincipalName.local" -IdentifierUris "https://$ServicePrincipalName.com"
$sp = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Scope /subscriptions/$ScopeSubscriptionId
$SecureStringPassword = ConvertTo-SecureString -String "password01!" -AsPlainText -Force
New-AzADAppCredential -ApplicationId $AzureAdApplication.ApplicationId -Password $SecureStringPassword -EndDate (Get-Date).AddYears(1)
此外,如果您只想生成 key 的随机值,则需要使用 New-AzureADApplicationPasswordCredential
在 AzureAD
模块中,请参阅此 link .
关于azure - Powershell - New-AzureRmADServicePrincipal - 获取 secret 属性不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957666/