如何从Azure密钥库获取所有机密,然后使用ASP.Net核心加载到配置对象中

如何从Azure密钥库获取所有机密,然后使用ASP.Net核心加载到配置对象中,azure,asp.net-core,asp.net-core-2.1,azure-keyvault,Azure,Asp.net Core,Asp.net Core 2.1,Azure Keyvault,我正在努力将Azure密钥库集成到ASP.NETCore 2.1 Azure WebJob中。为此,我尝试为WebJob使用以下代码。 .NetCore WebJob:Program.cs private static IConfiguration GetConfiguration(ServiceCollection services) { var environment = Environment.GetEnvironmentVariable("ASPN

我正在努力将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" />

如果要在web作业中使用Azure key vault,请参考以下代码

  • Sdk
  • 函数.cs

  • 你提到了吗?是的,我提到了那个链接。它只包含WebAPI的代码,但不包含.netcore webjob的代码。您是否在Azure web job中收到错误?是的,我在Azure webjob中收到错误
    <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>
    
    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();
                }
            }
        }
    
     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);
            }
        }