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)認證,關於這個認證網上資料也非常多。簡書上有篇不錯的參考(跳轉),這裡還有一個JWT的官網值得關注。
JWT一般用在基於RESTful API的移動端、Web端、其他端等多個終端的聯合認證。和Cookie-Based認證最大的不同是,他不需要手動來重定向,API只返回標準的HTTP Code,具體有哪些Code,我們可以檢視阮一峰大哥的
關於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地址
希望以上分享對你有幫助,我是張飛洪,入行10年有餘,人不堪其憂,吾不改其樂,謝謝您關注我頭條號。