JWT token心得


token的組成 
token串的生成流程。 
token在客戶端與服務器端的交互流程 
Token的優點和思考 
參考代碼:核心代碼使用參考,不是全部代碼

JWT token的組成

頭部(Header),格式如下: 

“typ”: “JWT”, 
“alg”: “HS256” 

由上可知,該token使用HS256加密算法,將頭部使用Base64編碼可得到如下個格式的字符串:

eyJhbGciOiJIUzI1NiJ9
  • 1

有效載荷(Playload): 

“iss”: “Online JWT Builder”, 
“iat”: 1416797419, 
“exp”: 1448333419, 
……. 
“userid”:10001 

有效載荷中存放了token的簽發者(iss)、簽發時間(iat)、過期時間(exp)等以及一些我們需要寫進token中的信息。有效載荷也使用Base64編碼得到如下格式的字符串:

eyJ1c2VyaWQiOjB9
  • 1

簽名(Signature): 
將Header和Playload拼接生成一個字符串str=“eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOjB9”,使用HS256算法和我們提供的密鑰(secret,服務器自己提供的一個字符串)對str進行加密生成最終的JWT,即我們需要的令牌(token),形如:str.”簽名字符串”。

token在服務與客戶端的交互流程

1:客戶端通過用戶名和密碼登錄 
2:服務器驗證用戶名和密碼,若通過,生成token返回給客戶端。 
3:客戶端收到token后以后每次請求的時候都帶上這個token,相當於一個令牌,表示我有權限訪問了 
4:服務器接收(通常在攔截器中實現)到該token,然后驗證該token的合法性(為什么能驗證下面說)。若該token合法,則通過請求,若token不合法或者過期,返回請求失敗。

關於Token的思考

服務如何判斷這個token是否合法? 
由上面token的生成可知,token中的簽名是由Header和有效載荷通過Base64編碼生成再通過加密算法HS256和密鑰最終生成簽名,這個簽名位於JWT的尾部,在服務器端同樣對返回過來的JWT的前部分再進行一次簽名生成,然后比較這次生成的簽名與請求的JWT中的簽名是否一致,若一致說明token合法。由於生成簽名的密鑰是服務器才知道的,所以別人難以偽造。

token中能放敏感信息嗎? 
不能,因為有效載荷是經過Base64編碼生成的,並不是加密。所以不能存放敏感信息。

Token的優點

(1)相比於session,它無需保存在服務器,不占用服務器內存開銷。 
(2)無狀態、可拓展性強:比如有3台機器(A、B、C)組成服務器集群,若session存在機器A上,session只能保存在其中一台服務器,此時你便不能訪問機器B、C,因為B、C上沒有存放該Session,而使用token就能夠驗證用戶請求合法性,並且我再加幾台機器也沒事,所以可拓展性好就是這個意思。 
(3)由(2)知,這樣做可就支持了跨域訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM