1、感想html
在寫這一系列文章以前,原本覺得寫這個以前已經搭建好的框架描述會比較簡單,可是慢慢寫下來才發現。寫這個真的不簡單額,原本覺得圖文一塊兒,一個晚上應該能輸出一篇吧。。。結果:現實真的骨感,一個星期能輸出兩篇都不錯了。。前端
1.以前沒有寫過總體系列類的文章,從高考以後就基本上沒有寫長篇的文章了。git
2.本系列文章主要定位面向是初中級的開發能夠根據步驟來搭建,高級與架構主要是相互討論一下借鑑,因此不少東西寫得很簡單,基本上至關因而手把手教搭建的了github
3.雖然本身以前的搭建已經完成了,可是重新來的時候好像有一些以前沒有考慮到的東西又要從新考慮一下加深了理解,從第4篇開始已經慢慢到了應用的層面,雖然基於abpvnext,可是並無徹底基於。要寫這些的時候又要想着怎麼寫得比較清晰,或者又怕本身理解不夠搞錯了。docker
4.如今大多數分享都是寫demo類,像這種直接拿整個解決方案的不多,同時架構這種又是不一樣的team有不一樣的解決方案。我只能寫我本身的用法,供參考吧。。json
總知一句話:好難啊!!儘可能堅持寫完整個框架搭建吧!!服務器
搞完以後看下要不要基於這個架構再開個持續集成的新坑:k8s,jenkins,docker之類的持續集成方面的。架構
唉!慢慢寫吧。app
2、簡要說明框架
源碼:https://github.com/lcjyslqyy/AbpVnext.Learn
因爲咱們在前面已經說明了,棄用id4的受權方法,所以在這裏須要使用原始的jwt來作受權校驗。
本篇文章則是介紹JWT的接入,並根據本身的須要定義受權失敗的返回,取代原來的401狀態碼。關於JWT的介紹,網上不少文章已經描述得很是清晰了,我這裏就不作過多的贅述了,大概是:前兩段是base64,誰均可以解碼的,最後一段是簽名用於和服務器的key和前兩段組合一個New string的簽名校驗;想要詳細瞭解的請跳轉:https://www.jianshu.com/p/576dbf44b2ae。
3、具體步驟
2.1 nuget在Host項目安裝:Microsoft.AspNetCore.Authentication.JwtBearer
在appsettings.json裏面添加:
"JwtAuth": {
"Audience": "abpvnextlearn",
"Issuer": "abpvnextlearn",
"SecurityKey": "dzehzRz9a8+8TAGbqKHP9ITdRmZdOpJWQRsFb8oz50A=",//簽名的key
"TokenTime": 48
}
而後在LearnHttpApiHostModule注入AddAuthentication的受權服務,使用jwt校驗的方式:以下圖
則已經添加Jwt受權成功。
2.2校驗一下是不是能夠正常受權了,
咱們先增長一個LoginController,增長Logout的方法,增長Authorize屬性,以下圖在這裏,注意一點:全部的方法都要添加方法屬性:如HttpPost,HttpGet等,否則在Swagger中是會拋出異常的。
這裏咱們看到swagger中有了logout的接口了,咱們請求一下,接口返回了401狀態碼,是未受權狀態的描述。這裏說明咱們的jwt的校驗是添加成功的了。
2.3修改未受權的輸出。咱們定義受權失敗返回{code="401",msg="無登陸信息或登陸信息已失效,請從新登陸"},因爲咱們後期全部的接口都遵循返回標準,code表示返回碼0爲成功,msg爲信息,data爲數據。
所以受權失敗也要統一此標準,以便前端能夠進行統一判斷。
須要在AddJwtBearer添加如下代碼:
options.Events = new JwtBearerEvents
{
OnChallenge = context =>
{
//此處代碼爲終止.Net Core默認的返回類型和數據結果,這個很重要哦,必須
context.HandleResponse();
var payload = "{\"ret\":401,\"err\":\"無登陸信息或登陸信息已失效,請從新登陸。\"}";
//自定義返回的數據類型
context.Response.ContentType = "application/json";
context.Response.StatusCode = StatusCodes.Status200OK;
context.Response.WriteAsync(payload);
return Task.FromResult(0);
}
};
再次請求以下圖,表示咱們替換成功了。
2.4接下來完善獲取jwt的請求Login,獲取jwt的流程,這裏我如寫一些簡單的邏輯。以下圖:
而後登陸來獲取token,以下圖:
而後使用postman來校驗token是否合法:
返回正常,說明受權校驗已經經過了。
4、下一章介紹
定義統一的返回,與全局異常處理替換掉abpvnext原來的全局異常