未加载自定义appsettings.json

时间:2018-05-07 09:54:07

标签: asp.net .net asp.net-core asp.net-core-2.0

我有一个.net核心2.0应用程序,有多个appsettings文件。我有appsettings.json,appsettings.Development.json和自定义appsettings.Secure.json。

//appSettings.json

{
  "AzureAd" : {
    "ClientId" : "CID"
  }
}

//appSettings.Development.json
{
  "AzureAd" : {
   "Random" : "random2"
 } 
}

//appSettings.Secure.json
{
  "AzureAd" : {
    "ClientSecret" : "CSECRET"
  }
}

我总是希望我的appSettings.Secure.json配置被加载。以下是json文件的配置方式。

 var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appSettings.json", optional : false)
                .AddJsonFile("appSettings.Development.json")
                .AddJsonFile("appsettings.Secure.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

问题是我的“AzureAd:ClientSecret”被加载到配置中(列在配置对象的Providers部分中)但是当我注入IOption时,ClientSecret属性为null。

AzureAdOptions是属性映射到的类,它的注册如下:

services.Configure<AzureAdOptions>(Configuration.GetSection("AzureAd"));

1 个答案:

答案 0 :(得分:1)

JSON在任何方面都不安全,特别是考虑到这很可能会被提交给你的源代码控制。

appsettings.json文件用于通用的环境特定配置。然后,您应该为每个环境提供appsettings.{environment}.json个文件,但这些文件中仍然没有任何秘密。在开发过程中,您可以利用用户秘密来存储您的秘密。在生产中,您应该使用Azure Key Vault和/或环境变量之类的东西来保密。

长而短,您的appsettings.Secure.json文件不应该首先存在。它不是一个环境而且不安全。