jwt與token redis,哪種方案更好用?

時間 2021-05-11 20:59:13

1樓:Gcrawl

jwt適合對登入許可權狀態啥的沒啥要求的場景,就是簡單儲存點用使用者資訊,比如內部小工具或者瞎糊弄下的應用。

其他場景jwt基本沒啥用,要用還是要加上服務端狀態管控,那樣不如直接就走Redis那一套,加個jwt沒啥用還增加複雜度。

總結:jwt就是個雞肋的玩具,對許可權有要求的場景基本都是不OK的

2樓:黃祖榮

看很多回答,思路跟我三年前想得差不多

三年前我提這種方案還被人冷嘲熱諷

看來凡是對新鮮事物的認識都需要乙個循序漸進的過程

但這三年期間,我也不是止步不前的

大多數人使用JWT,簽名的salt都是不變的,如果salt不能動態變更,時間久就會有猜中的風險

但使用動態變更的salt,就必須解決新舊salt過渡階段,新salt不會導致某些token提前失效!

所以在簽發JWT的時候,保證只用最新的鹽值;在檢驗JWT的時候,就要根據JWT簽發時間戳確定應該使用新salt還是舊salt來檢驗JWT簽名

JWT使用動態salt,雖然不能精確控制某個token失效,但可以緩解JWT缺失主動令某個token失效帶來的麻煩,大幅提公升JWT安全性

3樓:Andy

JWT只是一種Json web token,是token的一種,並不限制儲存位置。token+redis中的的token也可以是JWT,

而且JWT也不是一定就是單點登入的,單點登入一般都用到了類似redis這樣的key-value快取。

4樓:賈一餅

事實上無論如何都需要乙個redis的,使用者資訊存頭里,還要從redis取當前的使用者資訊,比如使用者資訊有個role欄位,這個字段可能會發生變化,如果是使用者主動操作,變化重新生成token反回給客戶端,但是如果不是使用者主動,變化無法到達,舊token過來我們也無法完全信任,只能從redis拿乙份最新的,所以說此時jwt的作用不大,當然某些場景會用到,如果使用者的某些操作只需要用到不會變的資訊,此時可以信任儲存在token中的資訊,不需要再走一遍io去redis

至於sessionid+記憶體(redis)取id+db取資訊的方案建議記憶體+db直接換成redis

5樓:欒海鵬

兩種Token:

1. 去中心化的JWT token

優點:1. 去中心化,便於分布式系統使用

2. 基本資訊可以直接放在token中。 username,nickname,role

3. 功能許可權資訊可以直接放在token中。用bit位表示使用者所具有的功能許可權。

缺點:服務端無法主動讓token失效

2. 中心化的 redis token / memory session等優點:服務端可以主動讓token失效缺點:每次都要進行redis查詢。占用redis儲存空間。

3. 優化方案:

3.1. Jwt Token中,增加TokenId欄位。

3.2. 將TokenId欄位儲存在redis中,用來讓服務端可以主動控制token失效

3.3 犧牲了JWT去中心化的特點。

3.4 使用非對稱加密。頒發token的認證伺服器儲存私鑰:私鑰生成簽名。其他業務系統儲存公鑰:公鑰驗證簽名。

回答方案2和3.2的區別:

方案2:redis儲存的是token的白名單。使用者的其他資訊也要放在redis中儲存。需要占用較大的redis空間和查詢次數。

方案3.2 :這裡的redis只儲存tokenId的黑名單,同時redis也可以分布式部署,讀寫分離。

token認證伺服器操作redis的master,其他redis同步master的資料

6樓:匯智動力IT學院

現在jwt驗證+oauth2授權的多吧???

JWT(Json web token)簡單來說是一種安全認證的機制,以JSON物件的形式在多方之間傳輸資訊。它可以在no session的情況下通過token的認證可以讓後台知道請求是來自於受信任的客戶端或網頁;

並且該token被設計為緊湊且安全的,也可以用來加密。

因為JWT可以使得請求信任、有效避免CSRF攻擊所以常用來做移動端或者分布式系統中的單點登入場景(SSO);

但是因為JWT token在登出登入場景下還有效以及token續簽的的問題,所以一般都會配合一些其他的解決方案,例如給token加狀態等。

JWT的token儲存可以是記憶體或者redis方式...

7樓:卡拉迦迪斯

缺陷是一旦下發,服務後台無法拒絕攜帶該jwt的請求(如踢除使用者)

——這個我沒理解……加一步黑名單過濾,什麼請求不都踢了嗎……

8樓:PrimaryK

方案2的token+redis 其實不是no session系統,其實你還是在維護乙個session, 只不過從單機記憶體轉到了redis上而已。而使用JWT可以做到真正的服務端無狀態(stateless)。

無狀態服務端的好處是每乙個介面都可以是純淨的方法(pure function)。pure function在伸縮性方面太重要了。所以一般對安全要求不高,對負載要求高的場景都會優先使用JWT。

而對安全敏感的場景推薦使用redis+token。

9樓:find goo

jwt可以把有效期儲存在附加資訊中,如果失效重新可以重新重新整理乙個jwt

jwt和session並不一樣,session是集中式管理的,jwt是分布式的,並不需要和頒發程式取得聯絡。

比如,你的乙個伺服器做web,乙個伺服器做人臉識別,用jwt很容易實現人臉識別的許可權驗證,而session是需要後台兩個伺服器之間實現聯絡。

jwt本質上是一種簽名證書,如同ssl簽名證書一樣,在證書中可以儲存一部分資訊(但為了收發效率考慮不要太長)。

jwt特別適合水平擴充套件,未來可以不斷加附加資訊,不同伺服器之間不需要取得集中式許可權管理,可以避免session集中訪問的壓力,異構網之間通訊的問題。

token+redis,本質上session的分布式的,只是集中在伺服器上,依賴於redis集中管理,如異構網可能相互之間訪問不了redis,這時可能會有同步問題,像tomcat下可以使用redis外掛程式來管理session,從單機變成分布式。

別外jwt和token+redis,也可以結合使用,使用jwt完成一些認證,使用token+redis完成另外一些認證,可能應用場景不一樣。

為了高伸縮性,水平擴充套件,能用jwt盡量建議使用jwt來管理,有的訪問頻繁,需要在jwt儲存大量資訊等場合結合使用token+redis來控制。

10樓:yaoyao

各有勝場!如果JWT能滿足你的需求,就果斷使用JWT。

但JWT的優勢也正是其劣勢之所在。所以在JWT不能滿足需求的的情況下,則需果斷放棄JWT。總之,別濫用JWT,更不要魔改JWT。

11樓:Steven湯圓

token+redis怎麼就是no session方案了?jwt實際就是把session儲存在http的header裡面了,加重了http header的重量,讓http header負重前行,本質都是session YES!

要搞清楚哪種更好,首先得弄清楚什麼是session,以及jwt與token+redis的區別,實際上token+redis就是session id方案,並沒有什麼區別。前面說了jwt實際就是http header的負重前行方案,所以,在不在意header重量的情況下,可以使用,另外還要注意安全問題,畢竟你將session加密丟進了header,如果別人解密了,你的session就全暴露了。如果需要在意header重量,那就規規矩矩用session id方案(token+redis本質也是session id方案)

12樓:youngc

JWT的主要優勢在於使用無狀態、可擴充套件的方式處理應用中的使用者會話。服務端可以通過內嵌的宣告資訊,很容易地獲取使用者的會話資訊,而不需要去訪問使用者或會話的資料庫。在乙個分布式的面向服務的框架中,這一點非常有用。

但是,如果系統中需要使用黑名單實現長期有效的token重新整理機制,這種無狀態的優勢就不明顯了。

優勢

快速開發

不需要cookie

JSON在移動端的廣泛應用

不依賴於社交登入

相對簡單的概念理解

限制

Token有長度限制

Token不能撤銷

需要token有失效時間限制(exp)

OAuth 2和JWT - 如何設計安全的API?

13樓:

簡單的講講JWT。簡單地說,基於JWT的使用者驗證方案一般都會採用Oauth2的簡化方式。通常是認證伺服器簽發accesstoken,客戶端持有accesstoken後就能向資源伺服器發起申請。

這個做法好處在於無論是認證伺服器還是資源伺服器都不需要儲存使用者Token,假設JWT用的演算法是對稱加密如,那麼資源伺服器端和認證伺服器端持有同樣的key即可。

這種場景非常適合微服務的場景下,將鑑權部分抽象出來作為基礎模組,這樣每次建立乙個新的業務服務時只要呼叫這個鑑權演算法並且持有與認證伺服器相同的key即可。這樣做的好處在於你JWT可以通過cookie或者是header,完全避免了跨域問題和客戶端平台問題。

另外一方面這種做法的不足之處持有key的客戶端可以無窮端登入或者狂刷你的介面,所以如果使用JWT想要避免這些問題的話也要去做介面防刷與多端登入的方案,如再增加乙個redis查詢token的環節。

14樓:大寬寬

如果專案是對使用者管理要求比較嚴格的話,應該使用redis。但是這時候已經不是「no session」系統了。

參看我的這個回答

實現乙個靠譜的Web認證

new macbook與air與pro選哪個?

Droid W 先說結論 Pro 原因 甲 Air屬於半淘汰產品 乙 NMB適用於輕辦公 丙 現在的Pro相當於Air的威力加強版,非常滿足題主的需求。 MCU 做PS和AA,NMB真的能把人逼瘋,然後大罵NMB。上面是個笑話,NMB效能薄弱,高負荷發燙有點厲害,高負荷時極其卡頓,發熱一高,續航也就...

ipadpro與macbook pro買哪乙個

當然是MacBook Pro。iPad Pro不是筆記本,很多軟體只能在筆記本上執行,比如Python,R什麼的,iPad上基本不能正常使用。另外現在就2個答案,不確定之後會不會有人給你推薦Windows的筆記本,因為金融專業需要excel,需要financial modeling。以我的個人經驗,...

孫策與周瑜 孫權與周瑜 哪對情誼更深?

saiwen1014 沒有策瑜也就沒權瑜,但是如果沒有權瑜那策瑜同樣不會這樣有名,周瑜是在孫策起兵時候來投奔,但是投奔的不只是他乙個,在孫策各種將領裡也不見得有特別的特殊,後來孫策的託孤之臣也是張昭沒周瑜,讓周瑜和張昭共掌事的是孫權,把周瑜奉為江東第一人也是孫權,如果不是周瑜在孫權時期的表現,他跟朱...