小白开学Asp.Net Core 《八》

            — — .Net Core 数据保护组件

1、背景

  我在搞(https://github.com/AjuPrince/Aju.Carefree)这个开源项目的时候,想做一些防止恶意攻击的小功能(如果 我通过页面 /Dome/GetData?id=123,那是不是不安全呢?是的,我完全可以尝试着给id赋值后去获取数据)怎么办呢?在.Net Core 中又给如何处理呢?

2、.Net Core 的数据保护组件

  1、尝试着在.Net Core 的内部扩展方法中发现

  我们都知道在 .Net Core 中注册服务,都是在 Startup->ConfigureServices 这个方式中 通过 services.AddXXXX 来添加的,我也尝试着看看 .Net Core 有无内置的数据保护组件,就利用 VS的智能提示功能 输入 server.Add 一个个去看,结果就被我我发现了(开心地像个孩子 哈哈)

F12 进去后

通过它的注释(Extension methods for setting up data protection services in an Microsoft.Extensions.DependencyInjection.IServiceCollection.)(译成中文:在Microsoft.Extensions.DependencyInjection.IServiceCollection设置数据保护服务的扩展方法)。

好,既然找到了,那我们就来学习下它(我们该如何使用它)。

  2、学习、使用

  

 既然知道了(.Net Core 内置了数据保护组件),那我也就在类试图中去找它了,最终还是被我给找见了。(好不废话了)

我们通过上图可以知道 .Net Core 内置了一个 IDataProtectionProvider  接口 和 IDataProtector 接口,其中 IDataProtectionProvider 接口是创建保护组件的接口,IDataProtector 是数据保护的接口,我们可以实现这两个接口,创建数据保护组件。

(肯定有人问我,我怎么知道的)

同样的方法,可以去看看,另一个接口。

下面就让我们来使用它。

1)、新建一个类

public class DataDemoViewModel  {   public int Id { get; set; } public string Name { get; set; }    public DataDemoViewModel(int id, string name)   {   Id = id;   Name = name;   }   }

2)、创建模拟数据

public class DemoController : Controller {   private List<DataDemoViewModel> _listDataProtect = new List<DataDemoViewModel>();  public DemoController(){    //创建模拟数据    for (int i = 0; i < 6; i++)   {   _listDataProtect.Add(new DataDemoViewModel(i, "Aju_Carefree" + i));  }   }
}

3)、在Startup类的ConfigureService方法中添加服务

services.AddDataProtection();

4)、在DemoController中  DI注入

public class DemoController : Controller   {   private List<DataDemoViewModel> _listDataProtect = new List<DataDemoViewModel>();  private readonly IDataProtector _dataProtector; public DemoController(IDataProtectionProvider dataProtectionProvider)   {   //创建模拟数据    for (int i = 0; i < 6; i++)   {   _listDataProtect.Add(new DataDemoViewModel(i, "Aju_Carefree" + i));  }   _dataProtector = dataProtectionProvider.CreateProtector("aju_carefree_string");  }   }

5)、使用

#region 数据保护组件Demo   public IActionResult ProtectIndex() {   var outputModel = _listDataProtect.Select(item => new  {   //使用 IDataProtector 接口的 Protect 方法对id字段进行加密 Id = _dataProtector.Protect(item.Id.ToString()),   item.Name   }); return Ok(outputModel); }   public IActionResult GetProtect(string id)  {   //使用 IDataProtector 接口的 Unprotect 方法对id字段进行解密   var orignalId = int.Parse(_dataProtector.Unprotect(id));   var outputModel = _listDataProtect.Where(s => s.Id == orignalId);    return Ok(outputModel); }   #endregion

6)结果展示

  (1)请求 /Demo/ProtectIndex

刷新页面,id 值是变的。

(2)、请求 /Home/GetProtect?id=(id取了上图中的第一个(框框圈的))

说明:

  (1):使用Provider创建Protector 的时候,我们传入了一个参数“aju_carefree_string”,这个参数标明了这个保护器的用途,也可以当作这个保护器的名字。(不同用途的保护器,不能解密对方方加密的数据)

  (2):还有一个类型的数据保护组件(ITimeLimitedDataProtector(带过期时间的数据保护器))就不在这里做说明了,用法差不多。

  (3):本篇文章,只是对数据保护组件的抛砖引玉(不只是说 它的用法就只能这么用,完全可以有别的用法。)

  (4):本文的代码全部上传至Github(https://github.com/AjuPrince/Aju.Carefree)(DemoController )

 参考文章:

  https://docs.microsoft.com/zh-cn/aspnet/core/security/data-protection/introduction?view=aspnetcore-3.0

 下一篇 需求了解些什么呢?留言(博客园)哦!(我会从留言最多中选择一个内容来分享 我的看法及使用(当然前提是我会哦 哈哈))

  本人有意组建兰州线下.Net 开发社区,有意者加群(QQ:649708779)如果条件允许的话,将会在8月中旬,组织个活动(只是有这个想法)

小白开学Asp.Net Core 《八》相关推荐

  1. 小白开学Asp.Net Core 《五》

    小白开学Asp.Net Core<五>                               -- 使用.Net Core MVC Filter 一.简介 今天在项目(https:/ ...

  2. 小白开学Asp.Net Core 《十》

    小白开学Asp.Net Core <十> - - Session.Cookie.Cache(老生常谈) 一.背景 在常谈Session和Cookie之前我们先来简单的了解下Http(可以说 ...

  3. 小白开学Asp.Net Core 《九》

    小白开学Asp.Net Core <九> - - 前端篇(不务正业) 在<小白开学Asp.Net Core 三>中使用了X-admin 2.x 和 Layui将管理后端的界面重 ...

  4. 小白开学Asp.Net Core 《七》

    小白开学Asp.Net Core <七> - - 探究中间件(MiddleWare) 1.何为中间件? 中间件是组装到应用程序管道中以处理请求和响应的家伙,管道中的每个组件都要满足以下两个 ...

  5. 小白开学Asp.Net Core《四》 —— 使用AspectCore-Framework

    小白开学Asp.Net Core<四>                               -- 使用AspectCore-Framework 一.AspectCore-Frame ...

  6. 小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

    1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://github.com/AjuPrince/Aju.Carefree)也有好多人都希望我能写一些简单的入 ...

  7. 前端小白在asp.net core mvc中使用ECharts

    对于在浏览器中绘制图形图表,目前有较多的js类库可以使用,如:ChartJS,Flot,canvasjs等,但是今天介绍的主角为国产图表库,并在apache孵化,就是大名鼎鼎的echarts. 前方高 ...

  8. ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

    一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...

  9. 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1

    <ASP.NET Core In Action>读书笔记系列五 ASP.NET Core 解决方案结构解析1 参考文章: (1)<ASP.NET Core In Action> ...

最新文章

  1. 观百工堰竹筏竞技比赛有感
  2. 软考-信息系统项目管理师-信息系统安全管理
  3. hadoop配置文件默认配置
  4. android中点击按钮弹出一个编辑框,本人是在Button的基础上加了Dialog,Dialog添加了一个编辑框,怎么将Button上的显示文字变成...
  5. window bat
  6. [机器学习]AutoML --- NNI (Microsoft)
  7. PolarDB for PostgreSQL 开源路线图
  8. centos7 oracle_Centos7主机名变成bogon的原因及解决方法
  9. 中小卖家需要避开的三个坑
  10. 底薪80万挖来一个大公司高管
  11. thinkphp解决分页后序列号自增的问题
  12. 几校联考——day1题解
  13. python3闭包通俗解释_python通俗解说闭包
  14. 数字化施工管理太玄乎?“要点+案例”让你一看就懂
  15. 123页6万字XX市新型智慧城市顶层设计方案
  16. java实现订单轨迹_B端零售业:订单轨迹日志功能设计思考
  17. 计算机考研英语需要过六级吗,四六级没过,会影响考研英语吗?
  18. 【无标题】正弦函数的一阶动态电路的三要素法
  19. Java中IO(三、转换流与打印流)
  20. 零基础都能看懂的 STL map 详解

热门文章

  1. java form 对象 一对一_java-双向一对一地“对象引用了一个未保存...
  2. powerpoint转换器_如何将PowerPoint演示文稿转换为主题演讲
  3. 鼠标指针放置上面,显示内容_使鼠标指针远离您键入的内容
  4. 机器学习实战之logistic回归分类
  5. Spring学习笔记十二---泛型依赖注入
  6. 判断三点是顺时针还是逆时针方向
  7. mysql数据库的备份和二进制日志恢复
  8. 迁移SVN注意事项及操作方法
  9. .NET 7 预览版2 的亮点之 NativeAOT 回顾
  10. [有奖励]GeneralUpdate开源项目招募开发者