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

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

Cookie-Based認證

<strong>認證流程

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

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

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

<strong>編碼實現

首先我們新建一個mvc項目

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

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

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

在Startup.cs中

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

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

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

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

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

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

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

JWT認證

<strong> 簡介和使用場景

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

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

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

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

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

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

<strong>編碼實現

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

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

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

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

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

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

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

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

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

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

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

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

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


分享到:


相關文章: