繁体   English   中英

通过应用程序配置获取 KeyVault 值

[英]Fetching KeyVault values through App Configuration

我想直接从 IConfiguration 获取 App Configuration 和 KeyVault 值。 这是来自 .Net 7 中的控制台应用程序

程序.cs:

var host = Host.CreateDefaultBuilder()
    .ConfigureLogging(a => a.AddConsole())
    .ConfigureHostConfiguration(config => config.AddEnvironmentVariables())
    .ConfigureAppConfiguration(config =>
    {
        config.ConfigureKeyVault();
    })
    .ConfigureServices((context, services) =>
    {
        var env = context.HostingEnvironment;
        var startUp = new Startup(env);
        startUp.ConfigureServices(services);
        startUp.ConfigureConsoleMethods(services);
                
        _serviceProvider = services.BuildServiceProvider(true); 
    })
    .Build();

扩展方法:

public static void ConfigureKeyVault(this IConfigurationBuilder config)
{
    var settings = config.Build();

    var appConfigConnString = settings.GetConnectionString("AppConfig");
    var keyVaultEndpoint = settings.GetValue<string>("KeyVault:Endpoint");
    var kvOptions = new DefaultAzureCredentialOptions { ManagedIdentityClientId = settings.GetValue<string>("KeyVault:ClientId") };

    config.AddAzureAppConfiguration(options =>
   {
        options.Connect(appConfigConnString);
        options.ConfigureKeyVault(x => x.SetCredential(new DefaultAzureCredential(kvOptions)));
    });
}

通过此设置,我可以像这样获取我的 KeyVault 密钥:

services.AddScoped<IApiFactory, ApiFactory>(x =>
{
    var keyVault = x.GetRequiredService<IKeyVaultService>();
                
    return new ApiFactory(
        keyVault.GetSecret("SomeObj:ClientId"),
        keyVault.GetSecret("SomeObj:ClientSecret"));
});

但我宁愿使用 IConfiguration 获取我的密钥,如下所示:

services.AddScoped<IApiFactory, ApiFactory>(x =>
{        
    return new ApiFactory(
        this.Configuration.GetValue<string>("SomeObj:ClientId"),
        this.Configuration.GetValue<string>("SomeObj:ClientSecret"));
});

问题

如何从 IConfiguration 获取我的 KeyVault 值?

如果在 Azure 应用程序配置中设置密钥保管库引用,则应该可以从IConfiguration访问从密钥保管库检索到的机密。

  • 确保密钥名称(例如“SomeObj:ClientId”)是您在 Azure 应用程序配置中设置的密钥名称,而不是您在 Key Vault 中设置的密钥名称。
  • 在尝试访问配置之前,请确保已构建该配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM