当前位置: 首页 > 科技观察

如何在ASP.NetCore中实现数据保护API

时间:2023-03-15 13:52:47 科技观察

转载本文请联系码农阅读公众号。在ASP.NetCore数据保护栈中,提供了一种非常简单的方法对API进行加密,以保护数据的安全。通常,实现数据加密和数据解密。在这篇文章中,让我们看看如何使用数据。安全的API。理解加密和散列在安全领域,加密和散列是两个非常重要的概念,开发人员经常将它们混合使用。其实,这是错误的。加密就是使用加密算法将一种数据转换成另一种数据。同时也要注意,这是双向操作。加密数据只能通过合适的密钥解密。加密数据也称为密文。在今天的系统间通信中,数据加密还是非常简单高效的。相比之下,哈希是一种将文本转换为消息摘要的技术。需要注意的是,哈希值是唯一的,也就是说不同的文本文本不能生成相同的哈希值,另外还需要注意的是,当文本转换为哈希值时,你很难再次将哈希值恢复为文本。一般来说,加密是一种双向技术,可以使用同一个密钥对数据进行加密和解密。哈希是一种单向技术,可以将文本转换为消息摘要,很难恢复到原始文本。安装Microsoft.AspNetCore.DataProtection要使用DataProtectionAPI,您可以使用VisualStudio2019中的NuGet包管理器可视化界面,也可以使用NuGet包管理器控制台在命令行窗口中键入以下命令。dotnetaddpackageMicrosoft.AspNetCore.DataProtection-Version2.2.0配置数据保护API,按照ASP.NETCore的默认约定将DataProtection注入到ServiceCollection中,如下代码所示。publicclassStartup{//Thismethodgetscalledbytheruntime.Usethismethodtoaddservicestothecontainer.publicvoidConfigureServices(IServiceCollectionservices){services.AddControllers();services.AddDataProtection();}}如果想把加密和解密密钥分开存放在文件系统中,可以注入一点修改,如下代码所示:值得注意的是,密钥是由数据保护API创建和维护的。缺省情况下,密钥的有效期为90天。如果有特殊需求,也可以自己指定密钥的有效期,如下代码所示:(newDirectoryInfo(@"D:\IDG\Temp"));dp.SetDefaultKeyLifetime(TimeSpan.FromDays(7));});}}你甚至可以使用证书来保护密钥,也可以直接使用AzureKeyValt来存储密钥。如果你想使用后者,你可以用下面的代码配置它。publicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){services.AddControllers();services.AddDataProtection().PersistKeysToAzureBlobStorage(newUri("SpecifytheUrihere")).ProtectKeysWithAzureKeyVault("keyIdentifier","clientId","clientSecret");}}现在数据加密dataprotectionAPI已经安装配置成功,下面看看如何在Controller中使用dataprotectionAPI。[ApiController][Route([controller]")]publicclassWeatherForecastController:ControllerBase{IDataProtector_protector;publicWeatherForecastController(IDataProtectionProviderprovider){_protector=provider.CreateProtector(GetType().FullName);}[HttpGet]publicstringGet(){varprotectedData=_protect("HelloWorld");returnprotectedData;}}从图中可以看出,HelloWorld已经成功加密返回给前端。顺便说一句,为了尽可能的可重用,你可以为数据保护API使用一个单独的帮助类。(stringtextToEncrypt,stringkey){return_dataProtectionProvider.CreateProtector(key).Protect(textToEncrypt);}publicstringDecrypt(stringcipherText,stringkey){return_dataProtectionProvider.CreateProtector(key).Unprotect(cipherText);}}值得注意的是第二个参数上面的Encrypt和Decrypt方法是密钥key,所以掌握密钥控制权在你手中。数据保护API使用起来非常简单和灵活。用这种方法生成密文数据是一个很好的方法。常见的场景太多了,比如:cookie,querystring数据,加解密操作在过期时间内是安全的。如果你的密文需要长期维护,这个场景建议自己实现加解密逻辑。翻译链接:https://www.infoworld.com/article/3431139/how-to-use-the-data-protection-api-in-aspnet-core.html