从 appsettings 中定义的 KeyVault 检索机密

Retrieving secrets from KeyVault defined in appsettings

在我的应用服务中,在“应用程序设置”选项卡上,如果我添加以下键值,它就可以正常工作。

some:secret -> @Microsoft.KeyVault(VaultName=...)

但是,如果我将该行移动到我的应用程序设置文件中:

{
  "some": {
    "secret": "@Microsoft.KeyVault(VaultName=...)"
  }
}

那么我的 'some:secret' 代码中检索到的值将为空。以下是我将我的应用程序设置添加到 configuratoin 的方式(还添加了 ASPNETCORE_ENVIRONMENT 到 App Service 的应用程序设置):

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()
            .ConfigureAppConfiguration((context, config) =>
            {
                var environment = context.HostingEnvironment.EnvironmentName;

                config.SetBasePath(Directory.GetCurrentDirectory());
                config.AddJsonFile("appsettings.json", optional: false);
                config.AddJsonFile($"appsettings.{environment}.json", optional: false);
                config.AddEnvironmentVariables();
            }));

我在这里错过了什么?

语法 @Microsoft.KeyVault(VaultName=...) 仅在部署在 Azure AppService(或 Function App)中时有效,并且该值将像来自该 blade 的任何其他应用程序设置一样注入:作为 ENV 变量。

您的 dotnet 应用程序将看不到(或不知道)KeyVault 的任何内容。秘密的检索由 AppService 处理。这就是为什么这也适用于任何其他运行时,如 Java 或 node.