ASP.NET Core-数据保护(Data Protection)
介紹:
ASP.NET Core 數據保護堆棧提供簡單易用的加密 API,開發人員可以使用它來保護數據,包括密鑰管理和旋轉。
Data Protection(數據安全)機制:為了確保Web應用敏感數據的安全存儲,該機制提供了一個簡單、基于非對稱加密改進的加密API用于數據保護。
它不需要開發人員自行生成密鑰,它會根據當前應用的運行環境,生成該應用獨有的一個私鑰。
ConfigureService()方法添加數據保護服務:
string applicationName = $"FAN.APP";
//添加數據保護服務,設置統一應用程序名稱和加密方式
IDataProtectionBuilder dataProtectionBuilder = services
.AddDataProtection(options => options.ApplicationDiscriminator = applicationName)
.SetApplicationName(applicationName)
.SetDefaultKeyLifetime(TimeSpan.FromDays(7))//<expirationDate>最小7天</expirationDate>
.UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration
{
EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
ValidationAlgorithm = ValidationAlgorithm.HMACSHA512
});
return dataProtectionBuilder;
加密、解密:
public class HomeController : Controller
{
private IDataProtector _dataProtector = null;
public HomeController(IDataProtectionProvider protectionProvider)
{
_dataProtector = protectionProvider.CreateProtector("aaa");
}
public IActionResult Index()
{
var protectedPayload = _dataProtector.Protect("haha");//加密
var unprotectedPayload = _dataProtector.Unprotect(protectedPayload);//解密
return View();
}
}
私鑰共享:
這在單一部署的情況下沒有問題。在集群情況下,為了確保加密數據的互通,應用必須共享私鑰。
秘鑰路徑:%HOME%AppDataLocalASP.NETDataProtection-Keys
這里以使用Redis來共享私鑰舉例,添加Microsoft.AspNetCore.DataProtection.StackExchangeRedis Nuget包用于存儲密鑰。
添加Microsoft.Extensions.Caching.StackExchangeRedisNuget包用于配置分布式Session
public void ConfigureServices(IServiceCollection services)
{
ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("xxxxxx:6379,defaultDatabase=10,password=xxxxxxx");
string applicationName = "FAN.APP";
services.AddDataProtection(o =>
{
o.ApplicationDiscriminator = applicationName;
})
//.PersistKeysToFileSystem(new System.IO.DirectoryInfo("c:\keys"))//秘鑰存儲文件位置
//.PersistKeysToRegistry(Microsoft.Win32.RegistryKey.FromHandle(null))//秘鑰存儲到注冊表
.PersistKeysToStackExchangeRedis(connectionMultiplexer, "FAN_share_key")//秘鑰存儲到Redis中
.SetApplicationName(applicationName)//設置程序唯一標識
.SetDefaultKeyLifetime(TimeSpan.FromDays(14))//設置key的有效時間,到期刷新
.UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration()
{
EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
});
services.AddControllersWithViews();
}
參考:
https://docs.microsoft.com/zh-cn/aspnet/core/security/data-protection/introduction?view=aspnetcore-3.1
https://www.cnblogs.com/lwqlun/p/9726191.html
https://www.cnblogs.com/savorboard/p/dotnetcore-data-protection.html
https://www.cnblogs.com/savorboard/p/dotnet-core-data-protection.html
https://www.cnblogs.com/savorboard/p/dotnetcore-data-protected-farm.html
總結
以上是生活随笔為你收集整理的ASP.NET Core-数据保护(Data Protection)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用python脚本(re)抓取美空mm
- 下一篇: 开源NAS系统使用总结