成人免费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-03 13:35:25

ASPweb程序

2021-02-28 20:56:37

NCache緩存框架

2021-03-03 22:37:16

MediatR中介者模式

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-01-07 07:39:07

工具接口 Swagger

2021-01-11 05:20:05

Controller代碼數據層

2021-02-07 17:29:04

監視文件接口

2021-03-18 07:33:54

PDF DinkToPdfC++

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技術棧公眾號

主站蜘蛛池模板: 国产一区二区精品在线 | 国产成人精品一区二区 | 老子午夜影院 | 一级高清视频 | 国产精品国产精品国产专区不卡 | 欧美日韩在线成人 | www网站在线观看 | 欧美成人一区二区三区片免费 | 91精品国产综合久久久久久丝袜 | 91色综合| 国产成人自拍av | 欧美日韩中文国产一区发布 | 国产高清在线 | 青青久久 | 国产99精品 | 欧美一级片中文字幕 | 日本在线一二 | 日日摸日日爽 | 九色国产 | 国产三级在线观看播放 | 亚洲欧美在线观看 | 欧美精品在线一区二区三区 | 欧美日韩精选 | 精品国产免费一区二区三区演员表 | 一区二区视频在线 | 伊大人久久| www.亚洲精品 | 久久综合九色综合欧美狠狠 | 中文字幕99 | 国产一区二区不卡 | 国产精品不卡一区 | 99精品国产在热久久 | av网站在线看 | 亚洲情综合五月天 | 欧美成人精品一区二区男人看 | 亚洲综合色网 | 成人在线观看中文字幕 | 成人3d动漫一区二区三区91 | 午夜电影网 | 黄色大片在线 | 中文字幕在线播放第一页 |