更多內(nèi)容,歡迎關(guān)注微信公眾號(hào):全菜工程師小輝。公眾號(hào)回復(fù)關(guān)鍵詞,領(lǐng)取免費(fèi)學(xué)習(xí)資料。

          存儲(chǔ)位置

          三者都是應(yīng)用在web中對(duì)http無(wú)狀態(tài)協(xié)議的補(bǔ)充,達(dá)到狀態(tài)保持的目的

          cookie:cookie中的信息是以鍵值對(duì)的形式儲(chǔ)存在瀏覽器中,而且在瀏覽器中可以直接看到數(shù)據(jù)。下圖為safari的cookie截圖:




          session:session存儲(chǔ)在服務(wù)器中,然后發(fā)送一個(gè)cookie存儲(chǔ)在瀏覽器中,cookie中存儲(chǔ)的是session_id,之后每次請(qǐng)求服務(wù)器通過(guò)session_id可以獲取對(duì)應(yīng)的session信息


          JWT:JWT存儲(chǔ)在瀏覽器的storage或者cookie中。由服務(wù)器產(chǎn)生加密的json數(shù)據(jù)包括:header,payload和signature三部分組成。header中通常來(lái)說(shuō)由token的生成算法和類型組成;payload中則用來(lái)保存相關(guān)的狀態(tài)信息;signature部分由header,payload,secret_key三部分加密生成。
          注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。下圖為官網(wǎng)的截圖:



          優(yōu)缺點(diǎn)

          cookie:

          * 優(yōu)點(diǎn):
          * 結(jié)構(gòu)簡(jiǎn)單。cookie是一種基于文本的輕量結(jié)構(gòu),包含簡(jiǎn)單的鍵值對(duì)。
          * 數(shù)據(jù)持久。雖然客戶端計(jì)算機(jī)上cookie的持續(xù)時(shí)間取決于客戶端上的cookie過(guò)期處理和用戶干預(yù),cookie通常是客戶端上持續(xù)時(shí)間最長(zhǎng)的數(shù)據(jù)保留形式。
          * 缺點(diǎn):
          * 大小受到限制。大多數(shù)瀏覽器對(duì) cookie 的大小有 4096 字節(jié)的限制,盡管在當(dāng)今新的瀏覽器和客戶端設(shè)備版本中,支持 8192 字節(jié)的
          cookie 大小已愈發(fā)常見。
          * 非常不安全。cookie將數(shù)據(jù)裸露在瀏覽器中,這樣大大增大了數(shù)據(jù)被盜取的風(fēng)險(xiǎn),所有我們不應(yīng)該將中要的數(shù)據(jù)放在cookie中,或者將數(shù)據(jù)加密處理。
          * 容易被csrf攻擊??梢栽O(shè)置csrf_token來(lái)避免攻擊。
          session:

          * 優(yōu)點(diǎn):
          *
          session的信息存儲(chǔ)在服務(wù)端,相比于cookie就在一定程度上加大了數(shù)據(jù)的安全性;相比于jwt方便進(jìn)行管理,也就是說(shuō)當(dāng)用戶登錄和主動(dòng)注銷,只需要添加刪除對(duì)應(yīng)的session就可以,這樣管理起來(lái)很方便。
          * 缺點(diǎn):
          * session存儲(chǔ)在服務(wù)端,這就增大了服務(wù)器的開銷,當(dāng)用戶多的情況下,服務(wù)器性能會(huì)大大降低。
          * 因?yàn)槭腔赾ookie來(lái)進(jìn)行用戶識(shí)別的, cookie如果被截獲,用戶就會(huì)很容易受到跨站請(qǐng)求偽造的攻擊。
          *
          用戶認(rèn)證之后,服務(wù)端做認(rèn)證記錄,如果認(rèn)證的記錄被保存在內(nèi)存中的話,這意味著用戶下次請(qǐng)求還必須要請(qǐng)求在這臺(tái)服務(wù)器上,這樣才能拿到授權(quán)的資源,這樣在分布式的應(yīng)用上,會(huì)限制負(fù)載均衡和集群水平拓展的能力。
          JWT:

          * 優(yōu)點(diǎn):
          * 因?yàn)閖son的通用性,jwt可以支持跨語(yǔ)言請(qǐng)求,像JAVA,JavaScript,PHP等很多語(yǔ)言都可以使用。
          * 因?yàn)橛辛藀ayload部分,所以JWT可以在自身存儲(chǔ)一些其他業(yè)務(wù)邏輯所必要的非敏感信息。
          * 便于傳輸,JWT的構(gòu)成非常簡(jiǎn)單,字節(jié)占用很小,所以它是非常便于傳輸?shù)摹?
          * 不需要在服務(wù)端保存會(huì)話信息, 利于服務(wù)器橫向拓展。
          * 缺點(diǎn):
          *
          登錄狀態(tài)信息續(xù)簽問(wèn)題。比如設(shè)置token的有效期為一個(gè)小時(shí),那么一個(gè)小時(shí)后,如果用戶仍然在這個(gè)web應(yīng)用上,這個(gè)時(shí)候當(dāng)然不能指望用戶再登錄一次。目前可用的解決辦法是在每次用戶發(fā)出請(qǐng)求都返回一個(gè)新的token,前端再用這個(gè)新的token來(lái)替代舊的,這樣每一次請(qǐng)求都會(huì)刷新token的有效期。但是這樣,需要頻繁的生成token。另外一種方案是判斷還有多久這個(gè)token會(huì)過(guò)期,在token快要過(guò)期時(shí),返回一個(gè)新的token。
          *
          用戶主動(dòng)注銷。JWT并不支持用戶主動(dòng)退出登錄,客戶端在別處使用token仍然可以正常訪問(wèn)。為了支持注銷,我的解決方案是在注銷時(shí)將該token加入到服務(wù)器的redis黑名單中。
          JWT與OAuth的區(qū)別

          這兩個(gè)概念總有人用混淆,所以一起介紹了。

          OAuth2是一種授權(quán)框架,用在使用第三方賬號(hào)登錄的情況(比如使用weibo, qq, github登錄某個(gè)app)
          JWT是一種認(rèn)證協(xié)議,用在前后端分離,需要簡(jiǎn)單的對(duì)后臺(tái)API進(jìn)行保護(hù)時(shí)使用。

          無(wú)論使用哪種方式切記用HTTPS來(lái)保證數(shù)據(jù)的安全性;

          更多內(nèi)容,歡迎關(guān)注微信公眾號(hào):全菜工程師小輝。公眾號(hào)回復(fù)關(guān)鍵詞,領(lǐng)取免費(fèi)學(xué)習(xí)資料。


          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                米奇7777日日操 | 精品久久成人无码片 | 好了AV第四导航在线观看 | 日日操日日插 | 成人无码另类电影 |