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

ASP.NET读取Azure Key Vault报NotFound异常,请求协助解决

ASP.NET读取Azure Key Vault报"Not Found"错误的解决方法

我在ASP.NET项目的Program.cs中添加了以下代码,目的是从Azure Key Vault读取密钥,但运行时抛出未处理异常:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
        CreateHostBuilder(args).Build().Run(); 
    } 
    public static IHostBuilder CreateHostBuilder(string[] args) => 
        Host.CreateDefaultBuilder(args) 
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>(); 
            }) 
            .ConfigureAppConfiguration((context, config) => 
            {
                var builtConfig = config.Build(); 
                var vaultName = builtConfig["keyvault"]; 

                var keyVaultClient = new KeyVaultClient( 
                    async (authority, resource, scope) => 
                    { 
                        var credential = new DefaultAzureCredential(false);
                        var token = credential.GetToken( 
                            new TokenRequestContext( new[] {"https://vault.azure.net/.default" } 
                        ); 
                        return token.Token; 
                    }); 

                config.AddAzureKeyVault( 
                    vaultName, keyVaultClient, 
                    new DefaultKeyVaultSecretManager());
            }); 
}

异常信息:Microsoft.Azure.KeyVault.Models.KeyVaultErrorException:'Operation returned an invalid status code 'Not Found'

解决步骤

  • 检查Key Vault地址正确性
    确认配置文件中keyvault项的值是完整的Key Vault URL(格式为https://{vault-name}.vault.azure.net/),而非仅名称。仅填名称会导致请求地址无效,触发404错误。

  • 验证身份访问权限
    确保应用运行时使用的身份(本地开发为当前用户账号,Azure部署为托管标识/服务主体)在Key Vault的访问策略中配置了机密读取权限。可在Azure门户的Key Vault -> 访问策略页面添加对应权限,选择正确的身份主体。

  • 确认DefaultAzureCredential身份有效性

    • 本地开发时:确保Azure CLI已登录目标订阅,或Visual Studio已关联正确的Azure账号;
    • 部署到Azure时:确认应用服务/虚拟机的托管标识已启用,并在Key Vault访问策略中添加该标识的权限。
  • 升级SDK包至最新版
    旧版Microsoft.Azure.KeyVault包存在兼容性问题,建议迁移到Azure.Security.KeyVault.Secrets和Azure.Identity包,新版API更简洁且维护更活跃。迁移后的代码示例:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureAppConfiguration((context, config) =>
            {
                var builtConfig = config.Build();
                var vaultUrl = builtConfig["keyvault"];
                var credential = new DefaultAzureCredential();
                config.AddAzureKeyVault(new Uri(vaultUrl), credential);
            });
    
  • 检查Key Vault资源状态
    登录Azure门户确认目标Key Vault已创建,资源状态为"正常",未被删除或禁用。

后续Logic Apps集成注意事项

解决读取问题后,在Logic Apps中执行Key Vault工作流时需注意:

  • 为Logic Apps的系统托管标识或服务主体配置Key Vault的对应权限(如机密读取/列表);
  • 在Logic Apps的Key Vault操作步骤中,填写完整的Vault URL,并选择正确的身份验证方式(托管标识优先)。

内容的提问来源于stack exchange,提问作者Saile B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:55:00