使用 Azure.Security.KeyVault 通过 SecretId / SecretIdentifier 而不是 Microsoft.Azure.KeyVault 检索证书(PFXcontent)
Using Azure.Security.KeyVault to retrieve certificate (PFXcontent) via SecretId / SecretIdentifier instead of Microsoft.Azure.KeyVault
只是想知道如何使用新的 Azure.Security.KeyVault
库实现同样的效果:
Azure.Security.KeyVault.Certificates
Azure.Security.KeyVault.Secrets
特别是关于从证书 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;
是的,该方法不提供通过 SecretIdentifier 获取 Secret 的方法,但它有一个参数 version
,参见 SecretClient.GetSecret(String, String, CancellationToken)
。
在您的情况下,如果您有 certificateIdentifier
,则包含 secret name
和 version
,它们与证书相同,只需将它们传递给方法即可。
var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());
KeyVaultSecret secret = client.GetSecret("secret-name","secret-version");
只是想知道如何使用新的 Azure.Security.KeyVault
库实现同样的效果:
Azure.Security.KeyVault.Certificates
Azure.Security.KeyVault.Secrets
特别是关于从证书 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;
是的,该方法不提供通过 SecretIdentifier 获取 Secret 的方法,但它有一个参数 version
,参见 SecretClient.GetSecret(String, String, CancellationToken)
。
在您的情况下,如果您有 certificateIdentifier
,则包含 secret name
和 version
,它们与证书相同,只需将它们传递给方法即可。
var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());
KeyVaultSecret secret = client.GetSecret("secret-name","secret-version");