我想知道为什么没有一种简单的方法从AppSettings.json加载安全密钥,而不是将它们作为XML从文件系统中加载?
以下是Microsoft文档中的示例。
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
我只是想知道为什么没有这样的东西。
services.AddDataProtection()
.PersistKeysToAppSetings("EncryptionKeys")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
我不明白为什么将密钥存储在XML文件中与将它们存储在AppSettigs.json中有什么不同。现在我知道格式不同了,但它或多或少都不安全?对的
我只是想确定我没有错过什么。
假设:
- AppSettings.json与磁盘上的其他XML文件一样安全
- Azure AppSettings是安全存储的,只能由允许的帐户访问
- Azure AppSettings值将覆盖任何上载的"开发人员"值
- 开发人员不会将他们的生产密钥存储在源代码中,对吧?:(
- 我知道这对过期/回收密钥无效
"这很复杂">
- 我们根据需要创建密钥
- 我们创建多个密钥,在密钥过期之前,我们创建一个新的密钥
- 我们需要在应用程序之间同步密钥
- 我们需要尽可能加密密钥
AppSettings没有给我们任何这些东西,应用程序无法更新自己的设置文件,因此排除了1和2,网站不会在实例之间复制更改的应用程序设置文件,从而排除了3,并且您无法加密应用程序中的设置,从而排除4。
格式不是问题,你可以编写自己的加密包装来处理#4,但其余的仍然是必要的,所以现在你必须更改设置的工作方式,以便它们是读/写的(并且安全地读-写(,然后说服web主机支持在实例之间同步你的自定义设置文件。