Как получить все секреты из Azure Key Vault, а затем загрузить в объект конфигурации, используя ASP. Net Core - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над интеграцией хранилища ключей Azure в ASP .NETCore 2.1 Azure WebJob. Для этого я попытался использовать следующий код для WebJob. .NetCore WebJob: Program.cs

        private static IConfiguration GetConfiguration(ServiceCollection services)
    {
        var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        // build config
        var configuration = new ConfigurationBuilder()
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
           .AddEnvironmentVariables()
           .Build();
        var keyVault = configuration.GetSection("KeyVault");
        configuration.AddAzureKeyVault(
            $"https://{keyVault["Vault"]}.vault.azure.net/",
            keyVault["ClientId"],
            keyVault["ClientSecret"]);
        return configuration;
    }

Но я получаю следующую ошибку:

IConfigurationBuilder не содержит определения для AddAzureKeyVault

Я использовал следующие пакеты NuGet:

    <PackageReference Include="Microsoft.Azure.KeyVault" Version="2.3.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="2.1.1" />

1 Ответ

1 голос
/ 23 апреля 2020

Если вы хотите использовать Azure хранилище ключей в веб-задании, см. Следующий код

  1. Sdk
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.6" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.10" />
    <PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="2.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.0" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>
Program.cs
class Program
    {
        static async Task Main()
        {
            var builder = new HostBuilder();
            builder.ConfigureWebJobs(b =>
            {

                b.AddAzureStorageCoreServices();
                b.AddAzureStorage();
            });
            builder.ConfigureLogging((context, b) =>
            {
                b.AddConsole();
            });
            var host = builder.Build();
            using (host)
            {
                await host.RunAsync();
            }
        }
    }
Functions.cs
 public class Functions
    {


        public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
        {
          // create IConfigurationRoot to read appsetting.json
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .Build();
            // create IConfigurationRoot to read Azure key vault
            IConfigurationRoot config = new ConfigurationBuilder()
                                                      .AddAzureKeyVault(
                                                         $"https://{configuration["KeyVaultName"]}.vault.azure.net/",
                                                         configuration["AzureADApplicationId"],
                                                         configuration["AzureADCert"],
                                                         new DefaultKeyVaultSecretManager())
                                                      .Build();



            // read one secret in Azure key vault
            var str = config["hurysecret"];
            logger.LogInformation(message + "\n str: " +str);
        }
    }

enter image description here

...