ASP.NET Core WebAPI JWT Bearer 认证失败返回自定义数据 Json

7 篇文章 0 订阅
6 篇文章 2 订阅

开发环境:ASP.NET Core Web API
目标框架:.NET Core 2.2 
权限认证:JWT Bearer
   提供者:成长的小猪 Jason Song

应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 JWT Bearer 进行接口权限认证的时候,返回的结果不是我们客户端想要的,其它我们想要给客户端返回统一的数据结构,在结果中告知客户端是不是有权限即可,但是系统默认返回的是 401 Unauthorized 错误代码且不适用我们,所以我们将系统默认返回结果改变成我们自定义的数据结构,接下来看以下解决方法

默认情况返回结果是这样子的


我们想像的样子应该是这样子的

 

感觉太啰嗦啦,直接上代码哦

// 添加Jwt Bearer权限认证 Add by Jason.Song(成长的小猪) on 2019/04/09
// 文章来源 http://blog.csdn.net/jasonsong2008
services.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数据对象,来源:https://blog.csdn.net/jasonsong2008" });
                //自定义返回的数据类型
                context.Response.ContentType = "application/json";
                //自定义返回状态码,默认为401 我这里改成 200
                context.Response.StatusCode = StatusCodes.Status200OK;
                //context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                //输出Json数据结果
                context.Response.WriteAsync(payload);
                return Task.FromResult(0);
            }
        };
    });

查看我本人更多原创文章,请点击这里

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值