如何使用ASP.Net Core从Azure Key Vault中获取所有秘密,然后加载到配置对象中。

问题描述 投票:0回答:1

我正在努力在ASP.NETCore 2.1 Azure WebJob中集成Azure Key Vault。为此,我尝试在 WebJob 中使用以下代码。.NetCore WebJob.Program.cs 程序.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" />
azure asp.net-core asp.net-core-2.1 azure-keyvault
1个回答
1
投票

如果你想在Web作业中使用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>
  1. 程序.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();
            }
        }
    }
  1. 函数.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

© www.soinside.com 2019 - 2024. All rights reserved.