ASP.NET读取Azure Key Vault报NotFound异常,请求协助解决
我在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

