但願給你3-5分鐘的碎片化學習,多是坐地鐵、等公交,聚沙成塔,水滴石穿,碼字辛苦,若是你吃了蛋以爲味道不錯,但願點個贊,謝謝關注。html
咱們知道一旦咱們給API添加[Authorize]後,等因而給資源增長了一道鎖,這時候咱們Postman的時候是訪問不了資源的,以下圖所示:git
這個時候,咱們就須要經過Token來訪問。這裏須要分兩個步驟來作,第一個是進行全局的JWT配置;第二個是生成Token函數的編寫。github
該配置在上一節已經實現了,這裏再也不重複,能夠訪問這裏複習。api
這節咱們重點是生成Token。首先咱們先創建一個Controller.cs並引入類庫:安全
using Microsoft.IdentityModel.Tokens; using Microsoft.Extensions.Options; using Microsoft.AspNetCore.Authentication.JwtBearer; using System.Security.Claims; using System.Text; using System.IdentityModel.Tokens.Jwt;
接下來,咱們實現核心代碼:爲了排版美觀,具體代碼能夠訪問個人GitHub地址進行查看。以下圖所示,咱們經過核心類JwtSecurityToken以及Issuer,Audience,Credentials參數進行生成,具體如何生成能夠參看源碼邏輯,這裏不進行深刻探討。架構
Postman上輸入帳號和密碼,返回Token以下圖所示:框架
咱們把生成的這一串令牌拿到jwt官網進行驗證,成功經過驗證,以下圖所示:函數
有了Token咱們就能夠安全的訪問咱們的資源了,注意這裏的token的生成,爲了安全,設置了兩個小時的時間期限,這個能夠本身靈活把控。最後咱們從新訪問http://localhost:5000/api/values,結果出來了,以下圖所示:學習
因爲實現JWT的框架在Headers默認的KEY是Authorization,並且VALUE必須是bearer+空格+默認加密串。若是你習慣的KEY是用Token,VALUE是自定義的加密串。說白了就是把Authorization換成Token,VALUE的bearer和空格去掉,自由定義加密串(以下圖所示),該怎麼改造呢?測試
咱們找到GitHub的源碼一塊兒來庖丁解牛。
定位到關鍵點:Microsoft.AspNetCore.Authentication.JwtBearer項目下的JwtBearerHandler.cs文件,咱們找到了默認實現的代碼,以下圖所示:
問題來了,咱們是否是要把源碼的Authorization改爲Token,而後去掉Bearer和空格呢?若是是這樣作,固然太low了!那麼如何再不修改源碼的狀況下作到對擴展的開放呢?
微軟的架構師已經幫咱們考慮到擴展性這點了,咱們要作的事情就很簡單了,這裏咱們分兩步來實現上面的定製:
經過實現ISecurityTokenValidator接口咱們自定義了一個MyValidateToken類,內部假設咱們的token值爲myTokenSecret,固然,能夠根據項目實際狀況選擇自定義加密方式。
咱們在Startup.cs裏經過AddJwtBearer把自定義的Token驗證類添加進來。
如上圖所示,這裏還要Clear一下,清除了驗證方式,並重寫Events的OnMessageReceived事件,在事件內部自定義獲取的頭部參數爲token,固然你能夠任意定義。
最後咱們作一個測試,咱們輸入參數名稱爲token,輸入正確的token值,測試經過!以下圖所示:
至此整個改造和定製就算完成了,以上代碼大部分是截圖,截圖看起來更加順眼,雖然不方便複製,若是你想看完整代碼能夠訪問個人GitHub地址
但願以上分享對你有幫助,我是IT人張飛洪,入行10年有餘,人不堪其憂,吾不改其樂,謝謝您關注。