Core的核心是DI,面向AOP的编程方式。在.NetCore中AOP的实现很大程度上依赖于Filter。下面就Core WebApi中的Filter进行举例。

其中鉴权中心我个人认为是比较重要的概念,因此做了特殊说明。这一片感觉代码没啥贴的其他博主一堆配置demo,就讲下我的理解吧。

1. Filter过滤器

Asp.Net WebApi

  • 授权过滤器 IAuthorizationFilter
  • 异常过滤器IExceptionFilter
  • 方法过滤器IActionFilter

Asp.Net core WebApi

  • 授权过滤器IAuthorizeFilter
  • 异常过滤器IExceptionFilter,IAsyncExceptionFilter
  • 方法过滤器IActionFilter,IAsyncActionFilter
  • 资源过滤器IResourceFilter
  • 结果过滤器IResultFilter,IAsyncResultFilter

  • IResourceFilter 在实例化构造函数之前,做缓存。
  • IActionFilter 在实例化构造函数之后,做权限控制,日志w,数据检验w,性能监控w,数据压缩w

执行顺序:全局Excuting->控制器Excuting->方法Excuting->执行实现方法->方法Exceted->控制器Excuted->全局Excuted

2. 授权模式(JWT实现模式)

step1:Authorization Server鉴权中心服务授权token

step2:请求Api+Token Api:200

非对称可逆加密

step1:鉴权中心通过私钥加密—token

step2:公钥解密 if 能解密token说明token一定是来自于鉴权中心(防止抵赖)。

JWT-Token认证

三部分组成(头信息 |负载 |签名)

{“alg”:"HS256","type":"JWT"} *  Payload 有效载荷,JWT默认不加密任何人都可以读到 * Signature 签名-防止抵赖-防止篡改=HMACSHA256(base64(header)+"_"+base64(payload),secret)

参考:https://jwt.io/

授权中心搭建好后,在api中StartUp注入下JWT服务与授权中间件,

 //1.Nuget引入程序包:Microsoft.AspNetCore.Authentication.JwtBearer
//services.AddAuthentication();//禁用
var ValidAudience = this.Configuration["audience"];
var ValidIssuer = this.Configuration["issuer"];
var SecurityKey = this.Configuration["SecurityKey"];
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) //默认授权机制名称;
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,//是否验证Issuer
ValidateAudience = true,//是否验证Audience
ValidateLifetime = true,//是否验证失效时间
ValidateIssuerSigningKey = true,//是否验证SecurityKey
ValidAudience = ValidAudience,//Audience
ValidIssuer = ValidIssuer,//Issuer,这两项和前面签发jwt的设置一致 表示谁签发的Token
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecurityKey))//拿到SecurityKey
//AudienceValidator = (m, n, z) =>
//{
// return m != null && m.FirstOrDefault().Equals(this.Configuration["audience"]);
//},//自定义校验规则,可以新登录后将之前的无效
};
});
            app.UseAuthentication();

在接口上添加[Authorize]标签即可

在基础环境搭建完成后,Filter与授权认证了解后,我们已经对CoreWebApi有了一定初步的认识了吧。

生命不息,折腾不止,奥力给~

Core WebApi项目快速入门(二):Filter详解的更多相关文章

  1. Core WebApi项目快速入门(一):环境部署

    1.WebApi新建与部署 1.1 新建Core WebApi工程 1.2 部署 1.2.1 IIS部署 首先以文件方式发布应用程序,然后下载依赖.net core运行时及host安装包 在iis中看 ...

  2. Core WebApi项目快速入门(三):踩坑笔记

    目前做公司一个项目,遇到了一些坑.跟大家分享,避免再次采坑. 1. 服务端发布应用报错 在windows server上发布程序报错.系统缺少更新包. https://support.microsof ...

  3. Hibernate入门(二)——hibernateAPI详解

    Hibernate API 详解 1.Configuration 功能:配置加载类,用于加载主配置,orm元数据加载 .创建: Configuration conf = new Configurati ...

  4. 07Vue.js快速入门-Vue路由详解

    对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能.但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用, 所以各大框架纷纷给出了单页面应用的解决路由跳转的方案. Vue框架的兼容性 ...

  5. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  6. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  7. 如何在启用JWT Token授权的.NET Core WebApi项目中下载文件

    背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt To ...

  8. ASP.NET Core WebApi 项目部署到 IIS 服务器的总结

    Point: - ASP.NET Core WebApi 项目 - 发布到 IIS 服务器 1. 选择 File System 2. 输入要发布到的路径 # 其它默认,直接发布 3. 打开 IIS,添 ...

  9. java web之Filter详解

    java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,W ...

随机推荐

  1. 多测师_讲解python__004 函数

    # 函数:一个工具,随调随用# 降级代码冗余## 增加代码的复用性,提高开发效率,为了不成为cv战士## 提高程序扩展性## 函数有两个阶段:定义阶段,调用阶段.## 定义时:只检查函数体内代码语法, ...

  2. K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙

    节点健康检测 意义 在K8S集群运行的过程中,节点常常会因为运行时组件的问题.内核死锁.资源不足等各种各样的原因不可用.Kubelet默认对节点的PIDPressure.MemoryPressure. ...

  3. 基于python常用排序与查找

    """ 排序与查找 -- 冒泡排序 -- 选择排序 -- 快速排序 --****经典 -- 希尔排序 """ # 常用排序的实现 # 冒泡排 ...

  4. PO模式学习笔记

    框架: 1.PO模式应用(测试对象和测试用例分离)(写到简历中) 2.引入ddt 3.深入分层:测试数据分离 4.遵循原则:测试用例的独立性 5.深入分层:元素定位分离 6.框架优化:提取basepa ...

  5. 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?

    基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...

  6. Jetson AGX Xavier部署ORB_SLAM2(ROS)

    1. 修改CMakeLists.txt Examples/ROS/ORB_SLAM2下的CMakeLists.txt 原 set(LIBS ${OpenCV_LIBS} ${EIGEN3_LIBS} ...

  7. zoookeeper集群和kafka集群启动快速启动脚本

    kafka.sh port=9092 # 根据端口号去查询对应的PID pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F&quo ...

  8. 使用PyPdf2合并PDF文件(没有空白、报错)

    使用PyPdf2合并PDF文件(没有空白.报错) 对于合并之后pdf空白,或者出现 'latin-1' codec can't encode characters in position 8-11: ...

  9. spring的xml文件的作用与实现原理

    1.Spring读取xml配置文件的原理与实现 https://www.cnblogs.com/wyq178/p/6843502.html 2.首先使用xml配置文件的好处是参数配置项与代码分离,便于 ...

  10. Zeal(文档)安装使用

    Zeal是一个为软件开发者提供的离线文档浏览器. 一.下载安装 下载地址:https://zealdocs.org/ 二.安装后下载自己需要的文档 1.通过Zeal原生源直接下载文档 Tools -& ...