但願給你3-5分鐘的碎片化學習,多是坐地鐵、等公交,聚沙成塔,水滴石穿,碼字辛苦,若是你吃了蛋以爲味道不錯,但願點個贊,謝謝關注。html
咱們先看下傳統Web端的認證流程:git
以上流程很簡單,有過mvc開發經驗的都瞭如指掌,一圖勝千言就不展開介紹了,下面簡單演示一下實現:github
首先咱們新建一個mvc項目api
咱們在AdminController.cs裏增長[Authorize]瀏覽器
在Startup.cs中restful
這時候咱們訪問https://localhost:5001/Admin/Index後臺會跳轉到Account/Loginmvc
因此咱們要先登錄一下:https://localhost:5001/account/login,模擬登錄,最後再訪問Admin/Index就成功了,以下圖:學習
整個過程,我錄個視頻看下:編碼
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年有餘,人不堪其憂,吾不改其樂,謝謝您關注。