ASP.NET Core WebAPI JWT Bearer 認證失敗返回自定義數據 Json

開發環境: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);
            }
        };
    });

查看我本人更多原創文章,請點擊這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章