You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7控制台应用:如何从IConfiguration获取KeyVault值?

在.NET 7控制台应用中通过IConfiguration直接获取App Configuration与KeyVault值

要实现直接从IConfiguration读取KeyVault密钥,核心是让KeyVault的密钥被集成到应用的配置体系中,无需额外通过IKeyVaultService调用。以下是具体修改步骤:

1. 调整KeyVault与App Configuration的集成配置

你的ConfigureKeyVault扩展方法已连接App Configuration并配置了KeyVault凭证,但还需要确保KeyVault密钥能映射到IConfiguration的键上,有两种常用方式:

方式一:利用App Configuration的KeyVault引用(推荐)

在Azure Portal的App Configuration中,创建名为SomeObj:ClientId和SomeObj:ClientSecret的配置项,类型选择Key Vault引用,分别指向KeyVault中对应的密钥。保持你的扩展方法不变(已包含启用引用解析的逻辑):

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

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

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

方式二:直接从KeyVault加载指定密钥

如果不想依赖App Configuration的引用,可直接在配置中指定要加载的KeyVault密钥,映射到IConfiguration的对应键:

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

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

    config.AddAzureAppConfiguration(options =>
    {
        options.Connect(appConfigConnString)
               .ConfigureKeyVault(x => x.SetCredential(new DefaultAzureCredential(kvOptions)))
               // 直接加载KeyVault中的密钥,映射到IConfiguration的键
               .AddKeyVault("SomeObj:ClientId")
               .AddKeyVault("SomeObj:ClientSecret");
    });
}

2. 修改服务注册,直接使用IConfiguration

在注册IApiFactory时,从服务提供者中获取IConfiguration实例,直接读取密钥值:

services.AddScoped<IApiFactory, ApiFactory>(sp =>
{
    var configuration = sp.GetRequiredService<IConfiguration>();
    
    return new ApiFactory(
        configuration.GetValue<string>("SomeObj:ClientId"),
        configuration.GetValue<string>("SomeObj:ClientSecret"));
});

如果你的Startup类需要直接使用IConfiguration,可在构造函数中注入:

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IHostingEnvironment env, IConfiguration configuration)
    {
        _configuration = configuration;
        // 其他初始化逻辑
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IApiFactory, ApiFactory>(_ =>
        {
            return new ApiFactory(
                _configuration.GetValue<string>("SomeObj:ClientId"),
                _configuration.GetValue<string>("SomeObj:ClientSecret"));
        });
        // 其他服务注册
    }
}

注意事项

  • 确保用于访问KeyVault的身份(Managed Identity或服务主体)拥有KeyVault的密钥读取权限(Get、List)。
  • 若使用App Configuration的KeyVault引用,需确保App Configuration的身份同样拥有KeyVault的对应权限。
  • 配置构建时的config.Build()是为了读取App Configuration连接字符串,这一步必要,但要确保它在配置源添加的合适位置,避免遗漏其他配置。

内容的提问来源于stack exchange,提问作者Dan Beaulieu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:05:46