Gin*_*rma 5 .net c# azure azure-keyvault
我在这里使用示例代码解释
https://github.com/Azure-Samples/app-service-msi-keyvault-dotnet
但他们只解释了我们如何获得单个分泌物而不是分泌物列表。
所以为了得到所有的秘密,我正在使用这个代码示例
var all = kv.GetSecretsAsync(url).GetAwaiter().GetResult();
foreach (var secret in all)
{
secretlist.Add(secret.Id);
}
Run Code Online (Sandbox Code Playgroud)
但它只获取秘密 ID,而不是价值。我也想获得所有秘密的价值,所以任何人都可以帮助我如何做到这一点?
小智 12
我们可以这样找到所有的键
var secretClient = new SecretClient(new Uri($"https://{AzureKeyVaultName}.vault.azure.net/"), new DefaultAzureCredential());
var v = secretClient.GetPropertiesOfSecrets().AsPages().ToList();
Run Code Online (Sandbox Code Playgroud)
查看文档,KeyVaultClient该类不包含获取所有机密(包括其值)的方法。该GetSecrets方法“列表秘密指定的键保管库。” 并返回一个SecretItem包含类型为 的项目的列表,该列表不包含值但仅包含秘密元数据。
这与 Key Vault REST API 一致,其中有一个GetSecrets返回......你猜对了......一个 SecretItems 列表。
长话短说:如果你想要所有秘密的所有值,你必须迭代列表并明确获取每个值。
如果您使用的是较新的Azure.Security.KeyVault.Secrets包,那么您可以使用该方法获取所有秘密GetPropertiesOfSecretsAsync,然后迭代每个结果调用GetSecretAsync. 显然这仍然是SELECT N+1但目前似乎仍然没有其他方法可以做到这一点。
请注意,您需要使用 C# 8.0 才能使用此示例:
private SecretClient _client;
// ... setup your client, for example:
_client = new SecretClient("https://mykeyvault.vault.azure.net/", new DefaultAzureCredential());
// ...
public async Task<IList<KeyVaultSecret>> GetAllAsync(CancellationToken cancellationToken = default)
{
AsyncPageable<SecretProperties> secretProperties = _client.GetPropertiesOfSecretsAsync(cancellationToken);
var secrets = new List<KeyVaultSecret>();
await foreach (var secretProperty in secretProperties)
{
var response = await _client.GetSecretAsync(secretProperty.Name, cancellationToken: cancellationToken).ConfigureAwait(false);
secrets.Add(response.Value);
}
return secrets;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7872 次 |
| 最近记录: |