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

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

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

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

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

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

    小白开学Asp.Net Core <六> —— 探究.Net Core 跨平台的奥秘 1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://gi ...

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

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

  6. 小白开学Asp.Net Core《三》

    小白开学Asp.Net Core<三> ——界面 我胡汉三再次又回来了(距离上篇时间有点长),今天抽时间将最近对框架采用的后台界面做个记录 1.先上图 (图一) (图二) 2.界面说明 后 ...

  7. 小白开学Asp.Net Core《二》(补)

    小白开学Asp.Net Core<二>(补) ——数据仓储层(Repositroy).服务层(Service) -------------------------------------- ...

  8. 小白开学Asp.Net Core《二》

    小白开学Asp.Net Core<二> ——数据仓储层(Repositroy) 一.历史现象 在后端开发中,数据库操作是最频繁的,每一个开发人员都会接触,甚至不少开发人员每天的工作就是与数 ...

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

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

随机推荐

  1. java Random类生成随机数

    封装一个方法: import java.util.Random; public class RandomUtil { /** * nextInt(num) 产生[0 ~ (num-1)]的随机数, 闭 ...

  2. EM算法直观认识

    Expectation Maximization, 字面翻译为, "最大期望". 我个人其实一直都不太理解EM算法, 从我个人的渊源来看, 之前数理统计里面的参数估计, 也是没有太 ...

  3. FCOS及其和Faster R-CNN的区别

    RetinaNet,SSD,YOLOv3,Faster R-CNN等都是Anchor-based的检测器,即需要预定义的Anchor boxes来进行训练.FCOS是一种Anchor-free和Pro ...

  4. 网络编程ssh,粘包

    1.什么是socket? TCP,可靠地,面向连接协议,有阻塞rect udp,不可靠的,无线连接的服务 这里因为不需要阻塞,所以速度会很快,但安全性不高 2.关于客户端退出而服务器未退出的解决办法 ...

  5. Celery详解(3)

    1.什么是Celery? Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列,同时也支持任务调度 2.Celery架构 Celery的架构由三部分组成,消息中 ...

  6. c# 第14节 字符方法、转义字符、字符串的方法

    本节内容: 1:字符的定义 2:字符的方法 3: 转义字符 4:字符串简介 5:字符串方法 1:字符的定义 char与Unicode一一对应,一个char 2个字节. 2:字符的使用方法: 实例: s ...

  7. Druid(数据库连接池) 学习资料

    学习资料 网址 官方文档 https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 主流Java数据库连接池 ...

  8. Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  9. Win10 Mactype 字体优化

    1.下载安装 Mactype :http://www.mactype.net/ 2. 打开MacType Tray.exe,右键其在任务栏图标就能选择配置文件. 分享一个配置文件: [General] ...

  10. ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)

    前言 用户程序比较简单,但是起着至关重要的作用 用户程序是和BootLoader程序相互配合的 拷贝文件到自己的项目 APP用户程序的 stmflash.c stmflash.h 和 上一节的Boot ...