成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 ASP.Net Core 中實現數據保護API

安全 應用安全
在 ASP.Net Core 數據保護棧中提供了一種非常簡單的方法來加密API,從而保護數據的安全,通常落地的做法就是 數據加密 和 數據解密,這篇文章我們就來一起看看如何使用 數據保護API。

[[375501]]

本文轉載自微信公眾號「碼農讀書  」,作者碼農讀書 。轉載本文請聯系 碼農讀書 公眾號。

在 ASP.Net Core 數據保護棧中提供了一種非常簡單的方法來加密API,從而保護數據的安全,通常落地的做法就是 數據加密 和 數據解密,這篇文章我們就來一起看看如何使用數據保護API。

理解加密和哈希

在安全領域,加密和hash是兩個非常重要的概念,常常被開發者混用,其實這是不對的,加密是用一種加密算法將一種數據轉換成另外一種數據,同時也要注意,這是一種雙向操作,已加密的數據只能通過一個合適的密鑰去解密,加過密的數據又稱為密文,在如今的系統間通訊,數據加密還是非常簡單高效的。

相比之下,hash 是一種將 text 轉成 消息摘要 的技術,要值得注意的是,hash值是唯一的,這就意味著不同的text文本不可能生成同一個 hash 值,而且還要注意的是,當 text 轉成了 hash 值之后,你很難再將 hash 值再還原成 text 文本。

總的來說,加密是一種雙向技術,可以使用同一個密鑰對數據進行加密解密,hash是一種單向技術,它可以將 text 轉成 消息摘要,而這個摘要很難再還原成原始text。

安裝 Microsoft.AspNetCore.DataProtection

要想使用 數據保護API, 可以使用 Visual Studio 2019 中的 NuGet package manager 可視化界面,還可以用 NuGet package manager console 在命令行窗口中鍵入如下命令。

  1. dotnet add package Microsoft.AspNetCore.DataProtection -Version 2.2.0 

配置數據保護API

按照 ASP.NET Core 的默認慣例,先將 DataProtection 注入到 ServiceCollection 中,如下代碼所示。

  1. public class Startup 
  2.     { 
  3.         // This method gets called by the runtime. Use this method to add services to the container. 
  4.         public void ConfigureServices(IServiceCollection services) 
  5.         { 
  6.             services.AddControllers(); 
  7.  
  8.             services.AddDataProtection(); 
  9.         } 
  10.     } 

如果你想將加密和解密用到的 密鑰 單獨存放到文件系統中的話,可以在注入時稍微修改一下,如下代碼所示:

  1. public class Startup 
  2.     { 
  3.         // This method gets called by the runtime. Use this method to add services to the container. 
  4.         public void ConfigureServices(IServiceCollection services) 
  5.         { 
  6.             services.AddControllers(); 
  7.  
  8.             services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\IDG\Temp")); 
  9.         } 
  10.     } 

值得注意的是,密鑰 是由 數據保護API 創建和維護,默認情況下這個 key 的有效期是 90天,如果你有特殊需求,也可以自己指定 key 的有效期,如下代碼所示:

  1. public class Startup 
  2.     { 
  3.         public void ConfigureServices(IServiceCollection services) 
  4.         { 
  5.             services.AddControllers(); 
  6.  
  7.             services.ConfigureDataProtection(dp => 
  8.             { 
  9.                 dp.PersistKeysToFileSystem(new DirectoryInfo(@"D:\IDG\Temp")); 
  10.                 dp.SetDefaultKeyLifetime(TimeSpan.FromDays(7)); 
  11.             }); 
  12.         } 
  13.     } 

你甚至可以使用一個證書來保護密鑰,也可以直接使用 Azure Key Valult 來存儲密鑰,如果想使用后者,可以用下面的代碼來配置。

  1. public class Startup 
  2.    { 
  3.        public void ConfigureServices(IServiceCollection services) 
  4.        { 
  5.            services.AddControllers(); 
  6.  
  7.            services.AddDataProtection().PersistKeysToAzureBlobStorage(new Uri("Specify the Uri here")) 
  8.                                        .ProtectKeysWithAzureKeyVault("keyIdentifier""clientId""clientSecret"); 
  9.        } 
  10.    } 

數據加密

現在 數據保護API 已經安裝并配置成功了,接下來看看如何在 Controller 中使用數據保護API。

  1. [ApiController] 
  2.     [Route("[controller]")] 
  3.     public class WeatherForecastController : ControllerBase 
  4.     { 
  5.         IDataProtector _protector; 
  6.  
  7.         public WeatherForecastController(IDataProtectionProvider provider) 
  8.         { 
  9.             _protector = provider.CreateProtector(GetType().FullName); 
  10.         } 
  11.  
  12.         [HttpGet] 
  13.         public string Get() 
  14.         { 
  15.             var protectedData = _protector.Protect("Hello World"); 
  16.  
  17.             return protectedData; 
  18.         } 
  19.     } 

從圖中可以看到,HelloWorld 已經被成功加密返回給到前端了,對了,為了能夠盡量可復用,可以單獨用一個幫助類來做 數據保護API 中的數據加密解密,如下代碼所示:

  1. public class DataProtectionHelper 
  2.     { 
  3.         private readonly IDataProtectionProvider _dataProtectionProvider; 
  4.  
  5.         public DataProtectionHelper(IDataProtectionProvider dataProtectionProvider) 
  6.         { 
  7.             _dataProtectionProvider = dataProtectionProvider; 
  8.         } 
  9.  
  10.         public string Encrypt(string textToEncrypt, string key
  11.         { 
  12.             return _dataProtectionProvider.CreateProtector(key).Protect(textToEncrypt); 
  13.         } 
  14.  
  15.         public string Decrypt(string cipherText, string key
  16.         { 
  17.             return _dataProtectionProvider.CreateProtector(key).Unprotect(cipherText); 
  18.         } 
  19.     } 

值得注意的是,上面的 Encrypt 和 Decrypt 方法的第二個參數是密鑰key,這樣的話 密鑰 的掌控權就在你的手上了。

數據保護API 使用起來還是非常簡單靈活的,使用這種方法來生成密文數據是一種非常好的方法,常見的場景太多了,比如:cookie,querystring 中的數據,而且在過期時間之內加密解密操作都是安全的,如果你的密文要維持很長的時間,這種場景下建議自己實現 加密解密 邏輯。

譯文鏈接:https://www.infoworld.com/article/3431139/how-to-use-the-data-protection-api-in-aspnet-core.html

 

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2021-01-15 05:38:28

ASPHttp端口

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-11-01 14:52:38

ElasticSear索引SQL

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-02-07 17:29:04

監視文件接口

2021-03-18 07:33:54

PDF DinkToPdfC++

2021-01-11 05:20:05

Controller代碼數據層

2021-03-12 00:04:52

網關Api

2009-08-05 11:00:46

獲得RowIndexASP.NET

2021-03-08 07:32:05

Actionweb框架

2022-08-01 08:00:00

開發工具跟蹤偵聽器

2021-01-05 07:51:06

版本化ASP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 五月网婷婷 | 日韩精品免费在线观看 | 亚洲高清在线 | 免费av在线网站 | 毛色毛片免费看 | 中文字幕1区 | 日韩成人在线看 | 久久久精品一区 | 五月婷婷激情网 | 成人国产精品久久 | 一级黄色播放 | 久久精品一区二区视频 | 毛片视频免费 | 久久综合一区二区三区 | 日韩在线观看精品 | 亚洲精品黄色 | 午夜久久久久久久久久一区二区 | 成人亚洲 | av在线一区二区三区 | 国产伦一区二区三区 | 91精品国产乱码久久久久久久久 | 91视频进入 | 欧美精品一区二区在线观看 | 日韩精品一区二区三区视频播放 | 国产日韩久久 | 最近中文字幕第一页 | 免费在线看黄 | 18gay男同69亚洲网站 | 亚洲不卡视频 | 国产精品特级片 | 久久av网站 | 91tv在线观看| 日韩国产在线 | 中文字幕日韩欧美一区二区三区 | 久久久久国产精品午夜一区 | 欧洲一级毛片 | 久久久久国产一区二区三区 | 国产japanhdxxxx麻豆 | 国产午夜久久久 | 亚洲 欧美 日韩 精品 | 亚洲xxxxx |