session传递参数_JWT与Session的比较
如今,越來(lái)越多的項(xiàng)目開(kāi)始采用JWT作為認(rèn)證授權(quán)機(jī)制,那么它和之前的Session究竟有什么區(qū)別呢?今天就讓我們來(lái)了解一下。
JWT是什么
定義
JSON Web Token(JWT)是一個(gè)開(kāi)放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊和自包含的方式,用于在各方之間作為JSON對(duì)象安全地傳輸信息。作為標(biāo)準(zhǔn),它沒(méi)有提供技術(shù)實(shí)現(xiàn),但是大部分的語(yǔ)言平臺(tái)都有按照它規(guī)定的內(nèi)容提供了自己的技術(shù)實(shí)現(xiàn),所以實(shí)際在用的時(shí)候,只要根據(jù)自己當(dāng)前項(xiàng)目的技術(shù)平臺(tái),到官網(wǎng)上選用合適的實(shí)現(xiàn)庫(kù)即可。
特點(diǎn)
使用JWT來(lái)傳輸數(shù)據(jù),實(shí)際上傳輸?shù)氖且粋€(gè)字符串,這個(gè)字符串就是所謂的json web token字符串。所以廣義上,JWT是一個(gè)標(biāo)準(zhǔn)的名稱;狹義上,JWT指的就是用來(lái)傳遞的那個(gè)token字符串。這個(gè)串有兩個(gè)特點(diǎn):
結(jié)構(gòu)
它由三部分組成:header(頭部)、payload(載荷)、signature(簽名),以.進(jìn)行分割。(這個(gè)字符串本來(lái)是只有一行的,此處分成3行,只是為了區(qū)分其結(jié)構(gòu))
和Session的區(qū)別
為什么我們要把JWT和Session做對(duì)比呢?因?yàn)槲覀冎饕诿恳淮握?qǐng)求的認(rèn)證時(shí)會(huì)用JWT,在此之前我們都是用Session的。那這兩者的區(qū)別在哪兒呢?
本身的含義
看了前面的介紹,我們發(fā)現(xiàn)JWT這個(gè)字符串其實(shí)本身就包含了關(guān)于用戶的信息,比如用戶名、權(quán)限、角色等。
Session傳遞的sessionId雖然是一個(gè)更簡(jiǎn)單的字符串,但它本身并沒(méi)有任何含義。
所以一般說(shuō)來(lái)JWT的字符串要比sessionId長(zhǎng),如果你在JWT中存儲(chǔ)的信息越長(zhǎng),那么JWT本身也會(huì)越長(zhǎng)。
而Cookie的存儲(chǔ)容量是有限制的(通常為4KB),所以大家在使用的時(shí)候需要注意。
解析方法
JWT的header和payload其實(shí)是有json轉(zhuǎn)變過(guò)來(lái)的,而signature其實(shí)就是一個(gè)加密后的字符串,因此解析起來(lái)較為簡(jiǎn)單,不需要其他輔助的內(nèi)容。
sessionId是服務(wù)器存儲(chǔ)的用戶對(duì)象的標(biāo)識(shí),理論上需要一個(gè)額外的map才能找出當(dāng)前用戶的信息。
管理方法
JWT理論上用于無(wú)狀態(tài)的請(qǐng)求,因此其用戶管理也只是依賴本身而已。我們一般是在它的payload中加入過(guò)期時(shí)間,在不增加額外管理的情況下,它只有自動(dòng)過(guò)期的方式。
Session因?yàn)樗揪褪谴鎯?chǔ)在服務(wù)器端的,因此管理方案就有很多,而且大多都很成熟。
跨平臺(tái)
JWT本身就是基于json的,因此它是比較容易跨平臺(tái)的,可以從官網(wǎng)下載不同平臺(tái)的包,解析即可。
session的跨平臺(tái)可能就不那么好做了,需要考慮的地方在于用戶信息存儲(chǔ)的格式,ProtoBuf、json、xml等,管理的話可能就需要專門(mén)的統(tǒng)一登錄平臺(tái),這個(gè)就不展開(kāi)了。
時(shí)效性
無(wú)狀態(tài)JWT一旦被生成,就不會(huì)再和服務(wù)端有任何瓜葛。一旦服務(wù)端中的相關(guān)數(shù)據(jù)更新,無(wú)狀態(tài)JWT中存儲(chǔ)的數(shù)據(jù)由于得不到更新,就變成了過(guò)期的數(shù)據(jù)。
session就不一樣了,sessionId本身就沒(méi)有太多含義,只需修改服務(wù)端中存儲(chǔ)的數(shù)據(jù)即可。
適用場(chǎng)景
JWT
JWT的最佳用途是一次性授權(quán)Token,這種場(chǎng)景下的Token的特性如下:
- 有效期短
- 只希望被使用一次
真實(shí)場(chǎng)景的例子——文件托管服務(wù),由兩部分組成:
- Web 應(yīng)用:這是一個(gè)可以被用戶登錄并維持狀態(tài)的應(yīng)用,用戶在應(yīng)用中挑選想要下載的文件。
- 文件下載服務(wù):無(wú)狀態(tài)下載服務(wù),只允許通過(guò)密鑰下載。
如何把JWT用在這個(gè)場(chǎng)景中呢?
總結(jié)
以上是生活随笔為你收集整理的session传递参数_JWT与Session的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: springboot profile_S
- 下一篇: ueditor如何设置上传图片的高度宽度