使用 Azure.Security.KeyVault 通过 SecretId / SecretIdentifier 而不是 Microsoft.Azure.KeyVault 检索证书(PFXcontent)

nea*_*lsu 3 c# azure azure-keyvault

只是想知道如何使用新Azure.Security.KeyVault库实现相同的目标:

  1. Azure.Security.KeyVault.Certificates

https://docs.microsoft.com/en-us/dotnet/api/overview/azure/security.keyvault.certificates-readme?view=azure-dotnet

  1. Azure.Security.KeyVault.Secrets

https://docs.microsoft.com/en-us/dotnet/api/overview/azure/security.keyvault.secrets-readme?view=azure-dotnet#retrieve-a-secret

特别是关于从证书 SecretId 获取 PFX 内容。新库似乎没有提供通过 SecretId 或 SecretIdentifier 获取 Secret 的方法,只能通过名称。

为了匹配以前这样做的事情:

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient = new KeyVaultClient(
                new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

CertificateBundle certificateBundle = await keyVaultClient.GetCertificateAsync(certificateIdentifier);

SecretBundle certificateWithPrivateKey = await keyVaultClient.GetSecretAsync(certificateBundle.SecretIdentifier.Identifier);

byte[] certificateWithPrivateKeyDecoded = Convert.FromBase64String(certificateWithPrivateKey.Value);

var certificate = new X509Certificate2(certificateWithPrivateKeyDecoded, (string)null);

return certificate;
Run Code Online (Sandbox Code Playgroud)

Joy*_*ang 5

是的,该方法没有提供通过 SecretIdentifier 获取 Secret 的方法,但它有一个参数version,请参阅SecretClient.GetSecret(String, String, CancellationToken)

在您的情况下,如果您有certificateIdentifiersecret nameversion,则它们与证书相同,只需将它们传递给方法即可。

在此处输入图片说明

var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());
KeyVaultSecret secret = client.GetSecret("secret-name","secret-version");
Run Code Online (Sandbox Code Playgroud)