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

Azure Key Vault引用语法无效问题求助

解决Azure App Service中.NET 7 Web API的Key Vault引用未解析问题

核心原因

直接在appsettings.json中写入@Microsoft.KeyVault(SecretUri=...)的语法,仅Azure App Service的配置系统会自动解析,.NET原生配置加载逻辑并不识别该格式。无论本地调试还是部署后直接读取配置,都不会触发Azure的解析流程,因此会直接返回原字符串。

解决方案

方案1:改用App Service配置项引用(推荐部署场景)

在Azure Portal的App Service配置页面,添加应用设置:

  • 键:设置为你需要的配置名(例如TESTKEY)
  • 值:直接填写@Microsoft.KeyVault(SecretUri=<your_kv_url>/secrets/TESTKEY)

App Service会自动解析该值,你的.NET应用只需像读取普通配置一样调用Configuration["TESTKEY"]即可获取密钥内容。

方案2:在.NET配置链中集成Key Vault(本地+部署通用)

既然你已通过AddAzureKeyVault正常访问密钥,可修改Program.cs的配置加载逻辑,让.NET自动从Key Vault加载密钥并覆盖配置占位符:

var builder = WebApplication.CreateBuilder(args);

// 添加Azure Key Vault作为配置源
var keyVaultUri = new Uri("<your_kv_url>");
builder.Configuration.AddAzureKeyVault(
    keyVaultUri,
    new DefaultAzureCredential());

// 后续正常构建应用
builder.Services.AddControllers();
// ...其他服务注册代码

var app = builder.Build();
// ...中间件配置代码
app.Run();

之后在appsettings.json中只需保留配置项名称即可:

{
  "TESTKEY": ""
}

.NET会自动从Key Vault加载同名密钥覆盖该配置项。若需层级化配置映射,可使用双横线分隔层级(例如Key Vault中密钥名为MySettings--TestKey,对应appsettings.json中MySettings.TestKey)。

方案3:手动解析配置中的Key Vault引用(自定义逻辑)

若需保留appsettings.json中的@Microsoft.KeyVault格式,可在启动时添加自定义解析逻辑:

// 在Program.cs中添加解析代码
var config = builder.Configuration;
foreach (var section in config.AsEnumerable())
{
    if (section.Value?.StartsWith("@Microsoft.KeyVault(") == true)
    {
        // 提取SecretUri
        var secretUriStr = section.Value.Split('=', StringSplitOptions.RemoveEmptyEntries)[1].TrimEnd(')');
        var secretUri = new Uri(secretUriStr);
        var secretClient = new SecretClient(secretUri, new DefaultAzureCredential());
        var secret = await secretClient.GetSecretAsync(secretUri.Segments.Last());
        // 替换配置值
        config[section.Key] = secret.Value.Value;
    }
}

注意事项

  • 本地调试时,确保你的开发账号拥有Key Vault的Secret Get权限,DefaultAzureCredential会自动使用本地Azure CLI或Visual Studio的登录凭据。
  • 部署到App Service后,确认系统托管标识已被授予目标Key Vault的Secret Get权限,权限添加后可能需要几分钟同步生效。

内容的提问来源于stack exchange,提问作者Oliver Nicholls

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:53:22