咱們知道,http協議自己是一種無狀態的協議,而這就意味着若是用戶向咱們的應用提供了用戶名和密碼來進行用戶認證,那麼下一次請求時,用戶還要再一次進行用戶認證才行,由於根據http協議,咱們並不能知道是哪一個用戶發出的請求,因此爲了讓咱們的應用能識別是哪一個用戶發出的請求,咱們只能在服務器存儲一份用戶登陸的信息,這份登陸信息會在響應時傳遞給瀏覽器,告訴其保存爲cookie,以便下次請求時發送給咱們的應用,這樣咱們的應用就能識別請求來自哪一個用戶了。近年來RESTful API開始風靡,使用HTTP header來傳遞認證令牌彷佛變得理所應當,而單頁應用(SPA)、先後端分離架構彷佛正在促成愈來愈多的WEB應用放棄歷史悠久的cookie/session認證機制,轉而使用JWT來管理用戶session。本次分享課程阿笨給你們帶來的是 JSON Web Token(JWT)是目前最流行的跨域身份驗證解決方案。jquery
1.一、本次課程包含知識點以下:
1)、什麼是JWT?
2)、JWT受權認證原理和實現思路
3)、在 ASP.NET Core 中使用 Jwt實現接口受權驗證
4)、在ASP.NET Core中集成Swagger實現JWT認證
5)、關於JWT Token的疑問解答web●在jquery中怎麼使用?
●服務端如何獲取經過JWT驗證經過的用戶Id身份呢?
●Jwt Token泄露了怎麼辦?
●JWT Token存放在哪裏?
●如何保證JWT Token的安全?
●JWT的Tokne過時了怎麼辦?是否有RereshToken功能?
●JWT缺點?
●什麼場景選擇使用JWT? 算法1.二、正確的學習課程方式須知json
1)、視頻+實例源代碼配套學習,一千個讀者就有一千個哈姆雷特,仁者見仁智者見智!後端
2)、基礎理論和實戰演練相結合,切記眼高手低。(備註:須要有必定的ASP.NET Core基礎)api
3)、在學習的過程當中,咱們少一點抱怨,將多一份收穫。跨域
若是您在學習過程當中遇到任何的課程問題,請先私下直接找阿笨老師進行在線的溝通和交流。謝謝你們的理解和支持,預祝你們學習快樂!瀏覽器
1.三、本課程適合人羣以下:安全
1)、有必定的ASP.NET Core開發基礎。服務器
2)、學習和了解ASP.Net Core跨平臺開發技術。
3)、喜歡阿笨分享的乾貨課程童鞋們。
1.四、一句話總結今天咱們學習達到的目標
如何簡單快速上手使用基於ASP.NET Core WebAPI跨平臺開發技術使用基於JWT實現接口受權驗證。
若是您一樣對本次分享《ASP.NET Core WebApi基於JWT實現接口受權驗證》課程感興趣的話,那麼請跟着阿笨一塊兒學習吧。廢話很少說,直接上乾貨,咱們不生產乾貨,咱們只是乾貨的搬運工。
接口受權驗證原理圖
JWT(JSON Web Token)是一種開放標準,它以 JSON 對象的方式在各方之間安全地傳輸信息。通俗的說,就是經過數字簽名算法生產一個字符串,而後在網絡請求的中被攜帶到服務端進行身份認證,功能上來講和 SessionId 認證方式很像。
通俗地來說,JWT是能表明用戶身份的令牌,可使用JWT令牌在api接口中校驗用戶的身份以確認用戶是否有訪問api的權限。
JWT經常被用做保護服務端的資源(resource),客戶端一般將JWT經過HTTP的Authorization header發送給服務端,服務端使用本身保存的私鑰key計算、驗證簽名以判斷該JWT是否可信。
JWT全稱爲json web token,說白了是什麼呢?就僅僅只是一個字符串而已,Jwt 形式的 token 通常分爲 3 個部分,分別是 Header,Payload,Signature,這三個部分使用 . 分隔。其中前兩部分使用 Base64 編碼,未經加密處理,第三個部分使用 RSA 加密。
因此一個 Jwt 看起來大概是這個樣子:
header.payload.signature
Header 頭
Header 部分通常用來記錄加密算法跟 Token 類型
舉個例子:
{"alg":"HS256","type":"JW」}
Payload 有效載荷
Payload 部分也是一個 JSON 對象,用來存放實際須要傳遞的數據。JWT 規定了7個官方字段,供選用。
iss (issuer):jwt的簽發者/發行人;
exp (expiration time):過時時間
sub (subject):主題
aud (audience):接收方;
nbf (Not Before):生效時間
iat (Issued At):簽發時間
jti (JWT ID):jwt惟一身份標識,能夠避免重放***
除了官方字段,你還能夠在這個部分定義私有字段,下面就是一個例子。
{"sub":"1234567890","name":"John Doe","admin":true}
Payload 存放的是一些不敏感的用戶數據,由於這一部分僅僅只是使用 Base64 加密,因此不該該用來保存用戶的密碼之類的信息。
Signature 簽名
3、JWT受權認證原理和實現思路這一部分是 Jwt 最重要的部分,使用 header 中記錄的算法進行了加密,加密方式以下:
HMACSHA256( base64UrlEncode(header) +"."+ base64UrlEncode(payload), secret)
因此這個部分能夠用來保證用戶信息不被篡改,起到驗證用戶身份的做用。
其實我以爲技術文章其實也能夠不用長篇大論,重點是要能把簡單的道理用深刻淺出的方式讓你們快速接受。
JWT實現原理圖
4、在 ASP.NET Core 中使用 Jwt實現接口受權驗證1)、用戶使用用戶名密碼來請求服務器。
2)、服務器進行驗證用戶的信息。
3)、服務器經過驗證發送給用戶一個token。
4)、客戶端存儲token,並在每次請求時附送上這個token值。
5)、服務端驗證token值,並返回數據。
須要注意這個token必需要在每次請求時傳遞給服務端,它應該保存在請求頭裏, 另外,服務端要支持CORS(跨來源資源共享)策略,通常咱們在服務端這麼作就能夠了Access-Control-Allow-Origin: *。
在asp.net core的api中添加token認證是一件很是容易的事情,這要多虧了JwtBearerAuthentication這個中間件 !
由於 Jwt 自己的特色,因此用來簽發 Token 的服務器能夠跟應用服務器不是同一臺,這樣就能夠搞微服務之類的東西。通常訪問者須要先到受權服務器(AuthorizedServer)進行受權,成功後才能訪問咱們的資源服務器(ResourceServer)
兩種方式來在ASP.NET Core中來使用JWT實現接口受權驗證
1)、採用自定義jwt驗證明現接口受權驗證
2)、ASP.NET Core框架已經集成了Jwt受權驗證機制(推薦使用)
1)、在jquery中怎麼使用?
2)、服務端如何獲取經過JWT驗證經過的用戶Id身份呢?
3)、Jwt Token泄露了怎麼辦?
4)、JWT Token存放在哪裏?
5)、如何保證JWT Token的安全?
6)、JWT的Tokne過時了怎麼辦?是否有RereshToken功能?
7)、JWT缺點?
8)、什麼場景選擇使用JWT?
7、總結JSON Web Token(JWT)是目前最流行的跨域身份驗證解決方案。
OAuth 2.0,它 是目前最流行的受權機制,用來受權第三方應用,獲取用戶數據技術。
ASP.NET Core已經與JWT高度的集成了,相對咱們的ASP.NET MVC項目來講使用也是比較簡單的。一旦你用了ASP.NET Core,你就會不由自主地愛上ASP.NE Core!若是你們感興趣的話,能夠學習一下早期分享的《ASP.NET WebApi 基於JWT實現Token簽名認證》課程,該課程就是採用自定義Token來實現接口身份認證以及包含了RereshToken功能。