zoukankan      html  css  js  c++  java
  • 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有了一定初步的认识了吧。

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

  • 相关阅读:
    关内存地址的分配
    关于URL
    linux的8小时差问题解决
    关于Scanner类
    域名后缀
    匿名对象用法
    final修饰符,多态,抽象类,接口
    二维数组的传参
    关于随机数
    面向对象编程的三大基本特征
  • 原文地址:https://www.cnblogs.com/CoolYYD/p/13413569.html
Copyright © 2011-2022 走看看