azure - Powershell - New-AzureRmADServicePrincipal - 获取 secret 属性不起作用?

标签 azure powershell azure-active-directory

当我尝试运行下面的代码时

$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

enter image description here

您也可以在门户中查看:

enter image description here

当您使用不带-ApplicationId的命令创建服务主体时,它会创建一个服务主体以及一个AD应用程序(应用程序注册),并且还会自动为您创建一个 secret .

$sp = New-AzADServicePrincipal -DisplayName $ServicePrincipalName -Scope /subscriptions/$ScopeSubscriptionId -ErrorAction Stop

enter image description here

在门户中检查:

enter image description here

<小时/>

如果您想使用带有-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)

enter image description here

此外,如果您只想生成 key 的随机值,则需要使用 New-AzureADApplicationPasswordCredentialAzureAD 模块中,请参阅此 link .

关于azure - Powershell - New-AzureRmADServicePrincipal - 获取 secret 属性不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957666/

相关文章:

Azure Cosmos db 和函数 javascript sdk - 如何异步读取文档?

python - 运行 Miscrosoft Semantic-kernel 时出现资源未找到错误

powershell - 执行使用 Chocolatey 的 Powershell 脚本的空运行

azure - 通过 PowerShell 查找 Azure SQL 数据库异地复制辅助数据库

c# - Azure 搜索索引器清除文档

c# - Azure WebJobs 上的 ABCPDF Gecko

powershell - 将AD计算机名称存储在阵列中

azure-active-directory - Azure AD 应用程序中的knownClientApplications 不起作用

c# - Azure AD 身份验证成功后按公司名称属性过滤掉

powershell - AzureAD PowerShell New-AzureRmRoleAssignment 不断失败