5.1基於JWT的認證和授權「深入淺出ASP.NET Core系列」


希望給你3-5分鍾的碎片化學習,可能是坐地鐵、等公交,積少成多,水滴石穿,碼字辛苦,如果你吃了蛋覺得味道不錯,希望點個贊,謝謝關注。

Cookie-Based認證

認證流程

  我們先看下傳統Web端的認證流程:

  

  以上流程很簡單,有過mvc開發經驗的都了如指掌,一圖勝千言就不展開介紹了,下面簡單演示一下實現:

編碼實現

  首先我們新建一個mvc項目

  

  我們在AdminController.cs里增加[Authorize]

  

  在Startup.cs中

  

  這時候我們訪問https://localhost:5001/Admin/Index后台會跳轉到Account/Login

  

  所以我們要先登陸一下:https://localhost:5001/account/login,模擬登陸,最后再訪問Admin/Index就成功了,如下圖:

  

  整個過程,我錄個視頻看下:

  

JWT認證

 簡介和使用場景

  Cookie-Based認證不是我們這篇文章的重點,接下來我們來看下JWT(JSON Web Token)認證,關於這個認證網上資料也非常多。這里有Catcher有篇不錯的文章參考,這里還有一個JWT的官網值得關注和簡書是的參考(跳轉)。

  相對以往的文章,我會吸其精華整理后變成我系列的一部分,我知道重復是危險的,但是不去整理,似乎離系統化還是有那么一點點距離。所以我寫的這篇不是重復造輪子,我會盡可能站在您的角度,考慮閱讀的舒服性,理解的便捷性。也許你會覺得簡單粗暴,一看就懂,那就有那么點意義。其實我覺得技術文章其實也可以不用長篇大論,重點是要能把簡單的道理用深入淺出的方式讓大家快速接受。

  JWT一般用在基於RESTful API的移動端、Web端、其他端等多個終端的聯合認證。和Cookie-Based認證最大的不同是,他不需要手動來重定向,API只返回標准的HTTP Code,具體有哪些Code,我們可以查看阮一峰大哥的RESTful API設計指南RESTful API最佳實踐。這里扯遠了,我們看下圖流程,基本就知道JWT的機制了。

  

  關於JWT我們掌握它的Header、Payload、Signature三段部分就差不多了,如下圖所示:

  

  我們看到左邊的Token的是怎么來的,右邊的SIGNATURE經過多重加密進行拼接,其中HEADER和PAYLOAD進行了BASE64位加密,然后+256位的Secret,外層再用SHA256進行加密。 

編碼實現

  接下來我們編碼來實現這個認證:

  1) 首先我們新建JSON配置和對應的實體映射。

  

  2)在Starup.cs當中,我們需要引入類庫

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

  3)同時在Starup.cs中,通過Bind方法進行配置和實體的綁定,然后配置JWT相關參數。如下圖所示:

   

  4)最后別忘記配置權限管道

  

  5)我們再看看加和不加Authorize的瀏覽器返回的區別,如下圖所示:

  

  以上代碼大部分是截圖,截圖看起來更加順眼,雖然不方便復制,如果你想看完整代碼可以訪問我的GitHub地址

  希望以上分享對你有幫助,我是IT人張飛洪,入行10年有余,人不堪其憂,吾不改其樂,謝謝您關注。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM