我在单个 Azure Web App 实例下托管六个 .NET Core 8 Web 应用程序。没有一个应用程序使用
services.AddDataProtection()
显式配置数据保护 API,因此它们都默认使用 C:\home\ASP.NET\DataProtection-Keys
来存储数据保护密钥。
我通过检查
activationDate
和 expirationDate
元素识别了目录中的活动密钥文件。尽管进行了这种设置,所有应用程序大约每五分钟就会定期将 System.Security.Cryptography.CryptographicException
记录到 Azure Application Insights。
System.Security.Cryptography.CryptographicException:
at Microsoft.AspNetCore.DataProtection.Cng.CbcAuthenticatedEncryptor.DecryptImpl (Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt (Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore (Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect (Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at Microsoft.AspNetCore.Session.CookieProtection.Unprotect (Microsoft.AspNetCore.Session, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
我有:
问题:
与程序开发者确认,只有来自自己安全系统的应用程序才有权使用。通常,应用程序的代码或其单一存在有明确的授权,这往往会限制其位置。然而,不常见的或新的事物也与现有的事物有平等的机会。这很糟糕。
要查找并解决此问题:
检查日志:在 Debug 目录内的 appsettings 文件中提供完整路径,以便查看问题的等效日志。
更新密钥:每天以每 12 小时一次的频率完成转弯。如果没有,请调用 IkeyRingProvider。 GetKeRing() 来更新它们。
保护数据:将它们全部移至一个程序,在一个数据集上的数据保护方面具有相同的规则。有时,朋友和家人无法为那些出于绝望的人提供帮助,服务提供商是唯一的解决方案,因此可以依赖于此目的。
使用 Azure:与其备份密钥副本,不如探索 Azure Blob 存储并将密钥编码到 Azure Key Vault 中。专家认为,这些美国大型科技公司在数据共享方面肯定存在缺陷。
云应用程序对于这种方法是安全的,该方法还涉及 Azure Blob 存储和 Azure Key Vault;通过此,您可以清楚地了解如何保护您的数据。
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(blobStorage, "keys.xml")
.ProtectKeysWithAzureKeyVault(keyVault, clientId, clientSecret);