一:JWT 是什麼
JSON WEB TOKEN
一個json格式的web令牌
JWT本身是一套標準,定義了一系列的規範
在Java中的實現有很多:
auth0.JWT:Github 鏈接
jwtk.JJWT:Github鏈接
當然還有很多,但都是大同小異
二:食用說明
本文主要講解需要了解的名詞,下一篇將會是實現
請務必瞭解一下這些東西:
- Token的本質
- 公鑰 私鑰
- 對稱加密 非對稱加密
- JWT標準
- JWS JWE
- 常用算法
三:介紹
1.Token的本質
到底什麼是Token:我們先看一下來自百度百科的定義:
Token其實就是令牌,這個令牌的功能很多,驗證身份(該請求是否可以被允許)、驗證權限(該請求是否有資格)、驗證時間(該請求是否在合法時間內)等諸多操作。
但是請注意,我在圖中打了個紅圈,他是臨時的,並不是永久的,也就是說,存在過期時間!我們也可以想一下,在登陸後,並不意味着可以永久登陸,只是維持一段時間,之後還要登陸。而且有很多地方的Token是一次性的也就是說,使用後就不能再次使用了。
這就是Token,代表着身份。
2. 公鑰與私鑰
其實公鑰與私鑰我給大家一個鏈接,這篇文章說的非常明白,而且淺顯易懂
3. 對稱加密和非對稱加密
這裏的對稱和非對稱指的是加密需要的信息和解密需要的信息是否爲同一個。
對稱加密:
對稱加密本身速度非常快,需要一個密鑰,用來加密和解密。
如果使用對稱加密進行文本傳輸,那麼密鑰的保存也十分重要!
常見的對稱加密算法:
- DES
- 3DES
- TDEA
- Blowflsh
- RC2
- RC4
- RC5
- IDEA
- SKIPJACK
非對稱加密:
算法複雜度比對稱加密有顯著提高,同時安全性也增加不少,詳情請見‘2 公鑰與私鑰’ 裏的鏈接。
4:JWT標準:
世界上總會有爲人類發展做出貢獻的一小撮人,這幫人閒着無聊就會制定五花八門的標準,但是這些標準對學習、開發等活動都有很大的貢獻。
JWT標準是一套表述json web token的規範。
都有什麼呢,你可以嘗試百度,然後看十分鐘一個關於廣告公司(JWT)的介紹再去找,或者直接戳:https://jwt.io/introduction/ (推薦右鍵翻譯)
什麼,沒看懂,沒關係,這裏還有一篇比較詳細的漢語介紹,https://www.cnblogs.com/zaixiuxing/p/6005968.html
看完這兩個文章,你會發現一個新名詞:JWS,請往下看
5: JWS
JWS 還有一個兄弟:JWE,他們和JWT有啥關係呢,:https://www.jianshu.com/p/50ade6f2e4fd
6:常用算法
常用的算法就那麼幾個,有的需要公鑰私鑰,有的需要一個密鑰
在JWT主頁中,已經有介紹了,而對於我研究過的算法有如下三個:HMAC256\RSA256\ECDSA256,大家感興趣的話可以仔細研究一下
這些算法幹了個啥事呢,用來加密和驗證,這部分我會在atuh0.JWT解析的時候說
四:JWT的基本使用流程:
1.生成JWT 頭
2.生成JWT負載
3.base64算法處理後的頭和負載 的鏈接,再加密
4.發送給客戶端
5.攜帶Token操作的時候,進行認證時間
6.認證是否爲自己所發、使用算法是否相同等等等等