如何通过单次调用获取Azure Key Vault中的所有密钥?
获取Azure Key Vault中所有密钥的方法
没问题!要一次性获取Azure Key Vault里的所有密钥并绑定到对应字段,你可以通过分页获取密钥列表,再批量拉取每个密钥的具体值来实现。下面是具体的实现方案:
核心思路
Azure Key Vault的客户端API会分页返回密钥列表,所以我们需要循环遍历所有分页结果,拿到每个密钥的标识(ID),再批量获取它们的实际值。之后你就可以把这些值存入一个字典,方便绑定到对应的字段。
完整代码示例
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); var vaultUri = "https://KeyvaultName.vault.azure.net/"; var allSecrets = new Dictionary<string, string>(); // 分页获取所有密钥的基本信息 var secretsPage = await keyVaultClient.GetSecretsAsync(vaultUri).ConfigureAwait(false); do { foreach (var secretItem in secretsPage) { // 获取单个密钥的具体值 var secret = await keyVaultClient.GetSecretAsync(secretItem.Id).ConfigureAwait(false); allSecrets.Add(secret.Name, secret.Value); } // 检查是否有下一页 secretsPage = await secretsPage.GetNextPageAsync().ConfigureAwait(false); } while (secretsPage != null); // 绑定到对应字段的示例(假设字段名称和密钥名称一致) ViewData["test1"] = allSecrets["test1"]; ViewData["test2"] = allSecrets["test2"]; // 也可以遍历字典批量绑定所有字段
优化建议
如果你的Key Vault里密钥数量较多,可以考虑使用并行异步调用来提高获取效率,比如用Task.WhenAll:
var secretTasks = secretsPage.Select(async item => { var secret = await keyVaultClient.GetSecretAsync(item.Id).ConfigureAwait(false); return new KeyValuePair<string, string>(secret.Name, secret.Value); }); var secretResults = await Task.WhenAll(secretTasks).ConfigureAwait(false); allSecrets = secretResults.ToDictionary(kv => kv.Key, kv => kv.Value);
这样就能一次性获取所有密钥,然后轻松绑定到你需要的字段啦。
内容的提问来源于stack exchange,提问作者vikas biradar
相关产品推荐
相关产品推荐

