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有了一定初步的认识了吧。
生命不息,折腾不止,奥力给~