我有一个.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"));
答案 0 :(得分:1)
JSON在任何方面都不安全,特别是考虑到这很可能会被提交给你的源代码控制。
appsettings.json
文件用于通用的环境特定配置。然后,您应该为每个环境提供appsettings.{environment}.json
个文件,但这些文件中仍然没有任何秘密。在开发过程中,您可以利用用户秘密来存储您的秘密。在生产中,您应该使用Azure Key Vault和/或环境变量之类的东西来保密。
长而短,您的appsettings.Secure.json
文件不应该首先存在。它不是一个环境而且不安全。