根据 Positive Technologies 最近的一项调查,数据泄露漏洞和安全问题影响了 44% 的 Web 应用程序。 敏感数据存在于所有 Web 应用程序中,如果数据保护不当,就会发生数据盗窃。 因此,为了适当的数据保护,ASP.NET Core 除了加密算法之外,还使用加密 API 来保护数据并避免任何数据丢失。 共享环境中不应该让每个人都可以访问的数据可以使用 ASP.NET 数据保护提供程序进行保护。
在此博客中,我们将介绍 ASP.NET 数据保护提供程序的工作原理以及 NCache 作为密钥存储提供者。
ASP.NET Core 数据保护提供商
数据保护是 ASP 的一项功能.NET Core 使您能够使用各种加密方法保护您的数据。 AES-256-CBC 和 HMACSHA256 是标准的负载保护算法,分别用于机密性和真实性。 这些方法所必需的两个子密钥源自一个 512 位主密钥,每个有效负载每 90 天修改一次。
1 2 3 |
services.AddDataProtection() // use a 14-day lifetime instead of a 90-day lifetime .SetDefaultKeyLifetime(TimeSpan.FromDays(14)); |
生成的密钥使用密钥存储提供程序进行存储/持久化。
密钥存储提供商
数据保护系统采用默认发现机制来确定加密密钥应保存在何处。 开发人员可以覆盖默认发现机制并手动指定位置。
1.默认密钥存储提供者
默认情况下,密钥保留在 ASP 中 Windows 中指定的临时文件夹中.NET Core,但将密钥存储在默认位置有一个缺点——多个 Web 应用程序实例无法访问密钥。 因此,要使密钥在多个服务器上可用并可供所有 Web 应用程序实例访问,用户必须手动指定密钥持久性的位置。
2. NCache 作为密钥存储提供者
为了使密钥在多个服务器上可用,ASP.NET Core 使您能够配置密钥存储提供程序。 在这里我们可以使用 NCache 作为密钥存储提供者,密钥保存在缓存中,并且由于 NCache 是集群范围内的共享缓存,这使得所有 Web 应用程序实例都可以使用密钥。 使用该方法, PersistKeysToNCache
.
- 坚持KeysToNCache
PersistKeysToNCache
是入口点,用户可以在其中指定缓存名称和缓存标签,其中密钥将在配置时保留 NCache 作为密钥存储提供者。
配置 NCache 作为密钥存储提供者
NCache 作为 密钥存储提供程序 存储数据保护服务的密钥,配置简单易行。 配置 NCache ASP.NET Core 数据保护提供商,请按照以下步骤操作。
步骤1: 配置数据保护服务
ASP.NET Core 为数据保护提供中间件。 这个中间件必须使用 AddDataProtection()
方法。 提供 DirectoryInfo
指向存储密钥的存储库。
- 打开 启动文件 你的项目的文件。
- 在
ConfigureServices()
方法,添加以下服务:
1 2 3 4 |
public void ConfigureServices(IServiceCollection services) { services.AddDataProtection(); } |
第 2 步:安装 NuGet 包
第一步是安装允许共享 ASP 的 NuGet 包.NET Core 数据保护密钥 NCache. 要安装 NuGet 包,首先打开 Visual Studio中 和去 工具 -> NuGet软件包管理器 -> 包管理器控制台 然后搜索 NuGet 包 AspNetCore.DataProtection.NCache
.
步骤3: 配置 NCache 作为数据保护服务的密钥存储提供者
安装 NuGet 包后,首先你必须配置 NCache 作为密钥存储提供商,为数据保护服务存储密钥。
1 2 3 4 5 6 |
public void ConfigureServices(IServiceCollection services) { string cacheName = "demoCache"; string cacheTag = "encryptions_keys_tag"; services.AddDataProtection().PersistKeysToNCache(cacheName, cacheTag); } |
进一步使用 NCache 作为 ASP 中的关键存储提供程序.NET Core 数据保护提供商,实施下面的示例应用程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.DataProtection; using Alachisoft.NCache.AspNetCore.DataProtection; namespace DataProtectionSample { public class Program { static void Main(string[] args) { string cacheName = "demoLocalCache"; string cacheTag = "MyEncryptionKeys"; var serviceCollection = new ServiceCollection(); serviceCollection.AddDataProtection() .PersistKeysToNCache(cacheName,cacheTag); var services = serviceCollection.BuildServiceProvider(); // create an instance of MyClass using the service provider var instance = ActivatorUtilities.CreateInstance(services); instance.RunSample(); } } Public class MyClass { IDataProtector _protector; // the 'provider' parameter is provided by DI public MyClass(IDataProtectionProvider provider) { _protector = provider.CreateProtector("Contoso.MyClass.v1"); } public void RunSample() { Console.Write("Enter input: "); string input = Console.ReadLine(); // protect the payload string protectedPayload = _protector.Protect(input); Console.WriteLine($"Protect returned: {protectedPayload}"); // unprotect the payload string unprotectedPayload = _protector.Unprotect(protectedPayload); Console.WriteLine($"Unprotect returned: {unprotectedPayload}"); } } } |
结论
ASP.NET Core 除了同等重要的加密算法之外,还通过使用加密 API 来确保添加的数据是安全的。 本质上, NCache 充当密钥存储提供程序来存储密钥,然后让多个 Web 应用程序实例可以访问它们。 所以,现在就下载一个完整的 60 天试用版,然后自己使用吧。
很棒的信息。 感谢分享