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

var secret = await keyVaultClient
    .GetSecretAsync("https://KeyvaultName.vault.azure.net/secrets/test1")
    .ConfigureAwait(false);

ViewData["keyvaultName"] = secret.Value;

//It is working fine. But now i want to get all the secrets in a single call and bind it to the fields

Sixto Saez
  • 12,610
  • 5
  • 43
  • 51
vikas biradar
  • 238
  • 1
  • 3
  • 12
  • Not sure what you mean by "secrets" specifically but here is a method that [returns a list of `SecretItem` instances for the KeyVault](https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.keyvault.keyvaultclientextensions.getsecretsasync?view=azure-dotnet) – Sixto Saez Mar 19 '18 at 17:43
  • yes i got it. by making use of GetSecretsAsync method which will fetch all the secrets names from the key vault. By using that names we can get secret values. – vikas biradar Mar 21 '18 at 10:20

2 Answers2

2

Key Vault only supports retrieving a single secret value at a time.

Rich Randall
  • 1,972
  • 13
  • 17
1

But this code will not run in local, i.e, while development. For this we need to install Azure CLI (azure-cli-2.0.29.msi) to make use of MSI in local environment. After installing this open Microsoft azure command prompt and run "az login" command and open the url mentioned in the command prompt and copy the code mentioned in prompt in that url. Now you would be able to make use of key vault using MSI in local and app service as well.

Dictionary<string, string> secretlist = new Dictionary<string, string>();

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();

// TO get access token to azureServices
Task<string> accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
accessToken.Wait();

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

var all = keyVaultClient.GetSecretsAsync("https://keyvaultName.vault.azure.net/");
string seperator = "secrets/";
foreach (Microsoft.Azure.KeyVault.Models.SecretItem someItem in all.Result)
{
    var secretName = someItem.Identifier;

    var secretValue = keyVaultClient.GetSecretAsync(secretName.ToString());
    secretValue.Wait();
    secretlist.Add(secretName.ToString().Substring(secretName.ToString().IndexOf(seperator) + seperator.Length), secretValue.Result.Value);
}
Sixto Saez
  • 12,610
  • 5
  • 43
  • 51
vikas biradar
  • 238
  • 1
  • 3
  • 12