使用KeyVault&创建Azure AD应用程序Azure PowerShell证书身份验证

时间:2017-02-01 10:59:58

标签: azure certificate azure-active-directory azure-powershell

我尝试使用Azure PowerShell证书身份验证在Azure AD中创建应用程序,下面是Powershell代码段:

Login-AzureRmAccount

$certPassword = ConvertTo-SecureString $CertPassword -AsPlainText -Force

$x509 = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList     $certPath,$certPassword

$credValue = [System.Convert]::ToBase64String($x509.GetRawCertData())

$adapp = New-AzureRmADApplication -DisplayName $ApplicationName -HomePage $URL -IdentifierUris $URL -CertValue $credValue -StartDate $startDate -EndDate $endDate     

$sp = New-AzureRmADServicePrincipal -ApplicationId $adapp.ApplicationId

Set-AzureRmKeyVaultAccessPolicy -VaultName $VaultName  -ServicePrincipalName $sp.ServicePrincipalNames[1] -PermissionsToKeys all –PermissionsToSecrets all -ResourceGroupName $ResourceGroupName

Azure AD应用程序已成功创建,但对于具有证书身份验证的Azure AD应用程序,customCeydentials中的customKeyIdentifier和值在创建后为null,这是我从Azure门户下载的应用程序清单的一部分:

"keyCredentials": [{
      "customKeyIdentifier": null,
      "endDate": "2018-01-25T11:55:35.7680698Z",
      "keyId": "ca1e536c-2220-478b-af73-1198d125bb5f",
      "startDate": "2017-01-25T11:55:35.7680698Z",
      "type": "AsymmetricX509Cert",
      "usage": "Verify",
      "value": null
    } ]

证书是使用本地生成的makecert命令创建的自签名证书。 我正在使用Powershell版本2.0.1

C#代码,用于检索带有Application Id&指纹

  

public static async Task GetAccessToken(string authority,   字符串资源,字符串范围){       var context = new AuthenticationContext(authority,TokenCache.DefaultShared);       var result = await context.AcquireTokenAsync(resource,AssertionCert);       return result.AccessToken; }

此代码在var结果中出错," Keyset不存在"

有什么方法可以解决这个问题吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

你看到答案了吗?

Create a Application in Azure AD with Azure PowerShell Certificate authentication

在评论中他提到CustomKeyIdentifier为null对于身份验证无关紧要。

您是否尝试过验证无论空值如何?\

编辑: 如果要为您拥有的公共证书生成指纹,可以使用以下powershell cmdlet执行此操作:

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import(“mycer.cer”)
$bin = $cer.GetCertHash()
$base64Thumbprint = [System.Convert]::ToBase64String($bin)

我希望这会有所帮助。