2015-12-15 93 views
2

我知道JWT可以用來取代基於cookie /會話的身份驗證,並且我們在之前的項目中使用了JWT,並且我知道使用JWT有很多好處,例如無狀態,CDN支持,避免csrf攻擊,更好以支持羣集ENV等JWT(json web token)可以完全替代Session嗎?

但是,我很困惑JWT是否可以完全取代Session?如果我們想充分利用JWT來保持所有會話狀態,那麼這意味着只要服務器後端想要將任何狀態添加到會話中,而不是這樣做,則服務器端必須重新生成具有該信息和客戶端的新令牌方必須更新新生成的令牌,我懷疑這是否正確或不正確?

如果我們僅利用JWT來支持身份驗證並保留唯一的用戶憑證信息,儘管身份驗證服務可以作爲獨立的微服務進行分離,但如果我們想要,會話對於業務服務後端仍然是必需的保持一些會話狀態,對嗎?在閱讀spring文檔時,建議利用Redis來保存會話狀態以支持集羣環境。

總的來說,我很困惑JWT是否可以用來完全替代會議?

非常感謝。

回答

3

(這不是一個答案。只是一些信息,到目前爲止,我已經收集了。我有完全相同的問題,我將其更改爲一個答案時,我徹底地解決這個問題。)

到目前爲止,就認證而言,我認爲JWT可以用來取代session + cookie。但會話不僅僅用於身份驗證,它實際上更多的是用於指定用戶特定的數據存儲的。鑑於JWT的尺寸限制(下面將對此進行描述),我不確定JWT是否可以爲此目的更換會話。 和恕我直言,認證恰好是會話的用例之一,因爲這些信息必須是用戶特定的。

如果您使用JWT代替服務器端會話,那麼您可能會將JWT存儲爲HTTP標頭。更可能的是,作爲Cookie(請參閱here)。但有一些size limit on the header和4K的cookie。如果你使用服務器端會話,我不認爲存在這樣的限制。

而這個article列出了智威湯遜的一些注意事項。

加1

及以下類似的線程質疑JWT是否能完全取代會話存儲。 我只是在那裏添加了更多的答案。請看看。

Do i need session store using JSON Web Token tokens ? Why not just using cookies?

ADD 2

如果我們存儲JWT的餅乾是我上面第一個鏈接,是不是再實施signed-cookie

答案就在這裏:Shall we store JWT as a cookie?

而我的另一個問題:Token based authentication and scalability? An illusion?

+0

@ mailme365我更新了我的答覆。現在看起來更像是一個答案。 – smwikipedia

+1

非常感謝你爲你詳細解答,智威湯遜不能完全代替會議,所以很多JWT的優點(如CDN,無國籍等)將僅用於身份驗證服務器,而不是業務服務器的工作,除非我們使用Redis的保存會話數據如Spring推薦。這意味着,如果我們將認證功能和業務功能組合到同一個tomcat應用程序中,我們仍然會使用Session,在這種情況下,我沒有看到使用JWT顯而易見的好處,唯一的好處是可以避免csrf攻擊。 – mailme365

+0

@ mailme365感謝您的總結。我也這麼認爲。 – smwikipedia