如何配置ConfigurationBuilder以读取Azure应用服务与Key Vault配置?
配置扩展与顺序问题解答
一、当前配置顺序与优先级
- 当前的配置添加顺序是合理的,.NET配置系统遵循后添加的配置源优先级更高的规则,即后添加的源中的同名配置会覆盖先添加的。
- 你当前的顺序是:
appsettings.json→appsettings.development.json→User Secrets,所以User Secrets里的配置会覆盖前两个文件中的同名项,符合本地开发时用User Secrets存储敏感信息的最佳实践。
二、读取Azure应用服务配置(含连接字符串)
Azure应用服务的应用设置和连接字符串会自动同步为环境变量,只需在配置链中添加环境变量源即可:
- 在配置构建器中追加
.AddEnvironmentVariables() - 顺序上建议放在User Secrets之后,这样Azure应用服务的配置能覆盖本地的User Secrets(生产环境优先使用云端配置)
- 连接字符串的兼容:Azure应用服务会将连接字符串转换为
ConnectionStrings__{名称}格式的环境变量(双下划线替代冒号),.NET配置系统会自动识别并映射到ConnectionStrings节点,和本地配置文件的结构完全兼容。
三、无凭证集成Azure Key Vault
要避免硬编码Key Vault凭证,推荐使用Azure托管标识(Managed Identity),无需存储任何凭证即可访问Key Vault:
前置云端配置
- 给你的Azure应用服务开启系统分配托管标识(或用户分配托管标识)
- 在Key Vault的访问策略中,给该托管标识添加
机密读取(Secret Get)等必要权限
代码集成
- 安装NuGet包:
Azure.Extensions.AspNetCore.Configuration.Secrets和Azure.Identity - 在配置构建器中添加Key Vault源,使用
DefaultAzureCredential自动获取身份凭证(生产环境用托管标识,本地开发用Azure CLI/Visual Studio的登录凭证):.AddAzureKeyVault( new Uri("https://你的密钥保管库名称.vault.azure.net/"), new DefaultAzureCredential() ) - 顺序上把Key Vault放在最后,让它的机密优先级最高(覆盖所有其他配置源的同名项)
完整配置构建示例
var builder = new ConfigurationBuilder(); builder.SetBasePath(Directory.GetCurrentDirectory()) // 本地基础配置 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // 开发环境本地配置 .AddJsonFile("appsettings.development.json", optional: true, reloadOnChange: true) // 本地开发敏感配置 .AddUserSecrets(typeof(Program).GetTypeInfo().Assembly) // Azure应用服务配置(环境变量) .AddEnvironmentVariables() // Azure Key Vault机密(优先级最高) .AddAzureKeyVault( new Uri("https://your-keyvault-name.vault.azure.net/"), new DefaultAzureCredential() ); Configuration = builder.Build();
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

