小白开学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. linux 重启 网络服务

    设置网路ip等后 需要重启网路服务 debian: /etc/iinit.d/networking  restart centos7: service network restart or syste ...

  2. 4-1 Matplotlib 概述

      Matplotlib概述 In [1]: import numpy as np import matplotlib.pyplot as plt #pyplot是matplotlib的画图的接口   ...

  3. 其他综合-Cobbler无人值守安装系统 CentOS 7

    Cobbler 无人值守安装系统 CentOS 7 1.实验描述 1.1 概述 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1 ...

  4. Windows局域网共享遇到的问题

    前言 接这篇:Windows 局域网内共享 我们的环境: 共享机:局域网内某台主机 windows 7 x64 客户端:windows 7 /windows 10 (各版本系统都有) 可以使用共享人数 ...

  5. MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  6. maven项目目录(二)

    -- 项目目录 --src 项目中的所有资源 --main 存放开发代码和资源 --java 项目的java源代码 --resources 项目的资源文件,源代码之外的其他文件 --test 存放测试 ...

  7. USACO Stamps

    洛谷 P2725 邮票 Stamps https://www.luogu.org/problem/P2725 JDOJ 1797: Stamps 邮票 https://neooj.com:8082/o ...

  8. options模块介绍

    一. options是什么? 是tornado中为我们提供好的一个模块. 二. options的作用? 用来定义, 存储, 转换全局参数. 即定义变量 三. options如何使用? import t ...

  9. 【php】day01

    一.PHPCORE基础 1.什么是PHP:[Hypertext Preprocessor]            WEB程序开发语言,运行在服务器端                         的 ...

  10. Linux性能优化实战学习笔记:第五讲

    一.什么是CPU的使用率 1.你最常用什么指标来描述系统的CPU性能? 我想你的答案,可能不是平均负载,也不是CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率到底是怎么算出来的吗? ...