【发布时间】:2019-01-30 07:40:41
【问题描述】:
我有点不清楚数据保护密钥在网络场环境中的工作方式。我没有所有服务器都可以使用的公共位置(并且不想处理权限)。因此,我想生成一个密钥并将其与 Web 应用程序一起分发。
我正在执行以下操作,但不确定是否正确。所以我在我的开发电脑上本地生成了一个密钥文件:
var specialFolder = Environment.SpecialFolder.CommonApplicationData;
var appDataPath = Path.Combine(
Environment.GetFolderPath(specialFolder),
"company",
"product"
);
services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(appDataPath));
这将创建一个key-some-guid.xml 文件。然后,我将这个文件与我的 Web 应用程序一起分发。
现在,当我运行我的 Web 应用程序时,在 Startup.Configure 服务中,将此文件复制到 appDataPath 位置(如上定义)并调用 services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(appDataPath));。
这行得通吗?还是我从根本上错过了什么?
【问题讨论】:
-
Will that work?你尝试的时候发生了什么? -
.Net Core 应该支持通过 Microsoft.AspNetCore.DataProtection 保护数据。
-
@mjwills 它似乎按照下面的答案工作。但它似乎非常笨拙。感觉应该有更好的解决方案。绝对是矫枉过正,只是为了使用 TempData。
-
Just是一个有趣的词。您想使用TempData。这意味着您要共享密钥。没有神奇的方法可以解决这个问题。这意味着您需要DataProtection。如果您对此有解决方案(听起来像您有),那么您应该使用它。
标签: c# .net asp.net-core .net-core