1. 程式人生 > >5.1基於JWT的認證和授權「深入淺出ASP.NET Core系列」

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,我們可以檢視阮一峰大哥的

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地址

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