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

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

  • 相关阅读:
    debian7安装oracle11g
    unix fopen和fopen_s用法的比较
    QT的三种协议说明
    Qt之遍历文件夹
    Debian 7 安装配置总结
    用户不在sudoers文件中的解决方法 .
    QT断点续传
    QFtp类参考
    FTP服务器简易有效的访问方法
    Java爬虫搜索原理实现
  • 原文地址:https://www.cnblogs.com/CoolYYD/p/13413569.html
Copyright © 2020-2023  润新知