[英]Data Protection in .NET6 with multiple web applications
我有 2 个负载平衡的 IIS 服务器 - 镜像。 每个服务器都有多个.NetFramework web 应用程序。 每个应用程序都在不同的池用户下运行,代码放在不同的文件夹中。
现在我需要将这些应用程序迁移到 .NET6
我有带 dp.Keys 表的 MSSQL 数据库。 我遇到了 DataProtection 的问题——所有应用程序都使用相同的密钥。 因此我不能使用 DpapiNG 密钥保护。 我还希望每个应用程序有 1 个密钥(第一台服务器上的 app1 和第二台服务器上的 app1 使用数据库中的 key1)。
这是我的代码:
services
.AddDataProtection()
.SetApplicationName("App1")
.AddKeyManagementOptions(options => options.XmlRepository = new SqlServerXmlRepository(connectionString, "dp", "Keys"));
我进行了一些挖掘,发现 DefaultKeyResolver(由 AddDataProtection() 使用)采用 FirstOrDefault() 键。 它不会为这个特定的应用程序寻找密钥。
var preferredDefaultKey = (from key in allKeys
where key.ActivationDate <= now + _maxServerToServerClockSkew
orderby key.ActivationDate descending, key.KeyId ascending
select key).FirstOrDefault();
这是预期的行为吗? 对所有应用使用 1 个密钥是否安全? 看起来密钥保护的唯一选择是证书?
我决定使用具有 DpapiNG 保护的 Azure blob 存储(每个应用程序的容器)。 它工作完美。
new BlobContainerClient(connectionString, containerName).CreateIfNotExists();
services
.AddDataProtection()
.PersistKeysToAzureBlobStorage(connectionString, containerName, "encryptedKey.xml")
.ProtectKeysWithDpapiNG();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.