上文《3種web會(huì)話管理的方式》介紹了3種會(huì)話管理的方式,其中token-based的方式有必要從實(shí)現(xiàn)層面了解一下。本文主要介紹這方面的內(nèi)容。上文提到token-based的實(shí)現(xiàn)目前有一個(gè)開放的標(biāo)準(zhǔn)可用,這個(gè)標(biāo)準(zhǔn)就是JWT,從它的官網(wǎng)上也能看到,目前實(shí)現(xiàn)了JWT的技術(shù)非常多,基本上涵蓋了所有的語言平臺(tái)。本文選擇expressjsonwebtoken基于nodejs來實(shí)現(xiàn)token-based會(huì)話管理。

相關(guān)代碼:https://github.com/liuyunzhuge/blog/tree/master/node_jwt

demo的說明我會(huì)在本文第二部分介紹,下面先介紹一下JWT的相關(guān)知識(shí)。

認(rèn)識(shí)JWT

JSON Web Token(JWT)是一個(gè)開放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊和自包含的方式,用于在各方之間作為JSON對(duì)象安全地傳輸信息。作為標(biāo)準(zhǔn),它沒有提供技術(shù)實(shí)現(xiàn),但是大部分的語言平臺(tái)都有按照它規(guī)定的內(nèi)容提供了自己的技術(shù)實(shí)現(xiàn),所以實(shí)際在用的時(shí)候,只要根據(jù)自己當(dāng)前項(xiàng)目的技術(shù)平臺(tái),到官網(wǎng)上選用合適的實(shí)現(xiàn)庫即可。

使用JWT來傳輸數(shù)據(jù),實(shí)際上傳輸?shù)氖且粋€(gè)字符串,這個(gè)字符串就是所謂的json web token字符串。所以廣義上,JWT是一個(gè)標(biāo)準(zhǔn)的名稱;狹義上,JWT指的就是用來傳遞的那個(gè)token字符串。這個(gè)串有兩個(gè)特點(diǎn): 
1)緊湊:指的是這個(gè)串很小,能通過url 參數(shù),http 請(qǐng)求提交的數(shù)據(jù)以及http header的方式來傳遞; 
2)自包含:這個(gè)串可以包含很多信息,比如用戶的id、角色等,別人拿到這個(gè)串,就能拿到這些關(guān)鍵的業(yè)務(wù)信息,從而避免再通過數(shù)據(jù)庫查詢等方式才能得到它們。

通常一個(gè)JWT是長這個(gè)樣子的(這個(gè)串本來是不會(huì)換行的,為了讓這個(gè)串看起來的樣子跟后面要介紹的數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)起來才手工加的換行):

image 

網(wǎng)友評(píng)論