zoukankan      html  css  js  c++  java
  • 【转】ASP.NET Core WebAPI JWT Bearer 认证失败返回自定义数据 Json

      应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 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);
                }
            };
        });
    

     转自:https://blog.csdn.net/jasonsong2008/article/details/89226705

  • 相关阅读:
    C# 调用线程并行上下文穿透-ILogicalThreadAffinative+CallContext
    C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的
    解析 .Net Core 注入——注册服务
    [Python]编码声明:是coding:utf-8还是coding=urf-8呢
    Vue加载组件、动态加载组件的几种方式
    源码版本管理工具 :TFS GIT
    Microsoft/Git-Credential-Manager-for-Mac-and-Linux
    SqlServer 对分组的内容进行拼接-group_concat
    MFC中页面设置对话框CPageSetupDialog
    MFC中查找替换对话框CFindReplaceDialog类
  • 原文地址:https://www.cnblogs.com/hycms/p/12236647.html
Copyright © 2011-2022 走看看