在Azure App Service中从Azure Vault读取密钥遇问题(Visual Studio)
Azure App Service无法解析@Microsoft.KeyVault配置语法的解决方案
问题根源
Azure Function App的host.settings.json中支持的@Microsoft.KeyVault(SecretUri=...)语法是Function Runtime特有的内置解析逻辑,Azure App Service的配置系统默认不会自动识别并解析这个格式的字符串,所以直接写在appsettings.Development.json里会被当成普通文本返回。
解决方案
方案1:通过Azure Portal配置(推荐,和Function App体验一致)
- 进入目标App Service的「配置」→「应用程序设置」页面
- 点击「新建应用程序设置」,填写键名(比如
key),值填写:@Microsoft.KeyVault(SecretUri=https://{vaultName}.vault.azure.net/secrets/{secretName}/) - 确保App Service的托管标识已被授予Key Vault的「机密读取」权限:
- 在Key Vault的「访问策略」中添加新策略,主体选择App Service的系统托管标识,权限勾选「机密」→「读取」
- 保存配置后,代码中直接调用
configuration["key"]即可获取实际密钥,Portal层面会自动完成语法解析和密钥拉取。
方案2:代码层面集成Key Vault配置源
如果需要在本地开发或通过代码主动拉取Key Vault密钥,可在Program.cs中添加Key Vault作为配置源:
var builder = WebApplication.CreateBuilder(args); // 引入Key Vault配置源 var keyVaultUri = new Uri("https://{vaultName}.vault.azure.net/"); builder.Configuration.AddAzureKeyVault( keyVaultUri, new DefaultAzureCredential()); var app = builder.Build(); // 直接通过配置密钥名获取(注意这里用的是Key Vault里的机密名称,不是自定义键名) var secretValue = builder.Configuration["{secretName}"];
- 本地开发时:确保已通过Azure CLI登录(
az login),或设置AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID环境变量以获取访问权限 - 生产环境:启用App Service的系统托管标识,并授予Key Vault的机密读取权限即可。
补充说明
- 不要在
appsettings.json或appsettings.Development.json中直接写@Microsoft.KeyVault语法,App Service的本地配置文件不会触发解析逻辑 - 若需批量导入Key Vault机密,可在Key Vault的「机密」页面中直接管理,或通过Azure CLI/ARM模板自动化配置
内容的提问来源于stack exchange,提问作者DrGriff
相关产品推荐
相关产品推荐

