Core WebApi项目快速入门(二):Filter详解

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有了一定初步的认识了吧。

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

原文地址:https://www.cnblogs.com/CoolYYD/p/13413569.html