jwt介绍
jwt實(shí)現(xiàn)無狀態(tài)登錄
JWT,全稱是Json Web Token, 是JSON風(fēng)格輕量級的授權(quán)和身份認(rèn)證規(guī)范,可實(shí)現(xiàn)無狀態(tài)、分布式的Web應(yīng)用授權(quán);官網(wǎng):https://jwt.io
GitHub上jwt的java客戶端:https://github.com/jwtk/jjwt
?
數(shù)據(jù)格式
JWT包含三部分?jǐn)?shù)據(jù):
-
Header:頭部,通常頭部有兩部分信息:
-
token類型:JWT
-
加密方式:base64(HS256)
-
-
Payload:載荷,就是有效數(shù)據(jù),一般包含下面信息:
-
用戶身份信息(注意,這里因?yàn)椴捎胋ase64編碼,可解碼,因此不要存放敏感信息)
-
注冊聲明:如token的簽發(fā)時間,過期時間,簽發(fā)人等
這部分也會采用base64編碼,得到第二部分?jǐn)?shù)據(jù)
-
-
Signature:簽名,是整個數(shù)據(jù)的認(rèn)證信息。根據(jù)前兩步的數(shù)據(jù),再加上指定的密鑰(secret)(不要泄漏,最好周期性更換),通過base64編碼生成。用于驗(yàn)證整個數(shù)據(jù)完整和可靠性
JWT交互流程
流程圖:
步驟翻譯:
-
1、用戶登錄
-
2、服務(wù)的認(rèn)證,通過后根據(jù)secret生成token
-
3、將生成的token返回給瀏覽器
-
4、用戶每次請求攜帶token
-
5、服務(wù)端利用公鑰解讀jwt簽名,判斷簽名有效后,從Payload中獲取用戶信息
-
6、處理請求,返回響應(yīng)結(jié)果
因?yàn)镴WT簽發(fā)的token中已經(jīng)包含了用戶的身份信息,并且每次請求都會攜帶,這樣服務(wù)的就無需保存用戶信息,甚至無需去數(shù)據(jù)庫查詢,完全符合了Rest的無狀態(tài)規(guī)范。
非對稱加密
加密技術(shù)是對信息進(jìn)行編碼和解碼的技術(shù),編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密),加密技術(shù)的要點(diǎn)是加密算法,加密算法可以分為三類:
-
對稱加密,如AES
-
基本原理:將明文分成N個組,然后使用密鑰對各個組進(jìn)行加密,形成各自的密文,最后把所有的分組密文進(jìn)行合并,形成最終的密文。
-
優(yōu)勢:算法公開、計(jì)算量小、加密速度快、加密效率高
-
缺陷:雙方都使用同樣密鑰,安全性得不到保證
-
-
非對稱加密,如RSA
-
基本原理:同時生成兩把密鑰:私鑰和公鑰,私鑰隱秘保存,公鑰可以下發(fā)給信任客戶端
-
私鑰加密,持有公鑰才可以解密
-
公鑰加密,持有私鑰才可解密
-
-
優(yōu)點(diǎn):安全,難以破解
-
缺點(diǎn):算法比較耗時
-
-
不可逆加密,如MD5,SHA
-
基本原理:加密過程中不需要使用密鑰,輸入明文后由系統(tǒng)直接經(jīng)過加密算法處理成密文,這種加密后的數(shù)據(jù)是無法被解密的,無法根據(jù)密文推算出明文。
-
RSA算法歷史:
1977年,三位數(shù)學(xué)家Rivest、Shamir 和 Adleman 設(shè)計(jì)了一種算法,可以實(shí)現(xiàn)非對稱加密。這種算法用他們?nèi)齻€人的名字縮寫:RSA
?
總結(jié)