开发环境: Core Web API 目标框架:.NET Core 2.2 权限认证:JWT Bearer 提供者:成长的小猪 Jason Song
应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 JWT Bearer 进行接口权限认证的时候,返回的结果不是我们客户端想要的,其它我们想要给客户端返回统一的数据结构,在结果中告知客户端是不是有权限即可,但是系统默认返回的是 401Unauthorized 错误代码且不适用我们,所以我们将系统默认返回结果改变成我们自定义的数据结构,接下来看以下解决方法
默认情况返回结果是这样子的
我们想像的样子应该是这样子的
感觉太啰嗦啦,直接上代码哦
// 添加Jwt Bearer权限认证 Add by Jason.Song(成长的小猪) on /04/09// 文章来源 /jasonsongservices.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>{o.TokenValidationParameters =new TokenValidationParameters{IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.SecretKey)),ValidateIssuerSigningKey = true,ValidIssuer = options.ValidIssuer,ValidateIssuer = options.ValidateIssuer,ValidAudience = options.ValidAudience,ValidateAudience = options.ValidateAudience,ValidateLifetime = options.ValidateLifetime};o.Events = new JwtBearerEvents{//此处为权限验证失败后触发的事件OnChallenge = context =>{//此处代码为终止.Net Core默认的返回类型和数据结果,这个很重要哦,必须context.HandleResponse();//自定义自己想要返回的数据结果,我这里要返回的是Json对象,通过引用Newtonsoft.Json库进行转换var payload = JsonConvert.SerializeObject(new { Code = "401", Message = "很抱歉,您无权访问该接口;Jason.Song(成长的小猪)写了一个JWT权限验证失败后自定义返回Json数据对象,来源:/jasonsong" });//自定义返回的数据类型context.Response.ContentType = "application/json";//自定义返回状态码,默认为401 我这里改成 200context.Response.StatusCode = StatusCodes.Status200OK;//context.Response.StatusCode = StatusCodes.Status401Unauthorized;//输出Json数据结果context.Response.WriteAsync(payload);return Task.FromResult(0);}};});
查看我本人更多原创文章,请点击这里。