国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET Core 數據保護(Data Protection)中篇

2024-07-10 12:46:37
字體:
來源:轉載
供稿:網友

前言 

上篇主要是對 ASP.NET Core 的 Data Protection 做了一個簡單的介紹,本篇主要是介紹一下API及使用方法。 

API 接口 

ASP.NET Core Data Protectio 主要對普通開發人員提供了兩個接口,IDataProtectionProvider 和 IDataProtector。
 我們先看一下這兩個接口的關系:

 namespace Microsoft.AspNetCore.DataProtection{ // // 摘要: //  An interface that can provide data protection services. public interface IDataProtector : IDataProtectionProvider {  byte[] Protect(byte[] plaintext);  byte[] Unprotect(byte[] protectedData); }} 

可以看到,IDataProtector繼承自IDataProtectionProvider ,并且提供了兩個方法 Protect 和 Unprotect ,從命名來看,一個是加密,一個是解密。而他們的簽名都是傳入一個byte數組,這也就意味著他們可以加密和解密一切對象。返回的也是byte數組,也就是說在實際的使用過程中,我們應該自己添加或者使用系統的一些擴展方法來具體化我們的需求。 

我們再看一下IDataProtectionProvider接口:

 namespace Microsoft.AspNetCore.DataProtection{ public interface IDataProtectionProvider {  IDataProtector CreateProtector(string purpose); }} 

IDataProtectionProvider提供了一個方法,通過傳入一個 purpose字符串(見后面詳細介紹)來生成一個IDataProtector接口對象。
 從這個接口的命名來看,它以Provider結尾,也就是說這部分我們可以實現自己的一套加解密的東西。 

我們在閱讀微軟項目的源代碼的時候,經常看一些以xxxxProvider結尾的對象,那么它的職責是什么,同時扮演什么樣的角色呢?
 其實這是微軟專門為ASP.NET設計的一個設計模式,叫Provider Model設計模式,也可以說它是由微軟發明的,它不屬于23種設計模式中的一種,從功能上來看的話,應該是工廠和策略的結合體。自ASP.NET 2.0開始,微軟就開始引入這種設計模式,最開始主要是用于實現應用程序的配置的多個實現。比如開發者最熟悉的web.config中, 針對于數據庫連接字符串的配置, 還有二進制,再比如XML啊等等很多,現在其他地方這種模式也用的越來越多起來。 

再來說一下CreateProtector方法簽名中的 purpose 這個字符串,在上一篇博文中為了讀者好理解,我把傳入的purpose說成可以理解為一個公鑰,其實這個說法是不嚴謹的,可以理解為一個標識,指示當前Protector的用途。 

在使用IDataProtector的時候,會發現它還有一些擴展方法位于Microsoft.AspNetCore.DataProtection命名空間下:

 public static class DataProtectionCommonExtensions{ public static IDataProtector CreateProtector(this IDataProtectionProvider provider, IEnumerable<string> purposes); public static IDataProtector CreateProtector(this IDataProtectionProvider provider, string purpose, params string[] subPurposes); public static IDataProtector GetDataProtector(this IServiceProvider services, IEnumerable<string> purposes); public static IDataProtector GetDataProtector(this IServiceProvider services, string purpose, params string[] subPurposes); public static string Protect(this IDataProtector protector, string plaintext); public static string Unprotect(this IDataProtector protector, string protectedData);}             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 敦煌市| 延吉市| 灵台县| 贵州省| 台州市| 黎城县| 乐亭县| 新沂市| 济源市| 西畴县| 娄底市| 余干县| 四子王旗| 嫩江县| 青神县| 新巴尔虎右旗| 和田县| 浪卡子县| 宾川县| 南溪县| 七台河市| 怀宁县| 临江市| 分宜县| 班戈县| 镇雄县| 马尔康县| 隆安县| 泗阳县| 新建县| 东丰县| 安仁县| 航空| 彭州市| 阜南县| 钟山县| 象州县| 银川市| 西乌| 中西区| 普陀区|