關於Jwt的一些思考

在使用jwt的過程中發現了兩個問題續期退出的問題。

續期

因爲jwttoken在簽發之後是有過期時間的,所以就存在管理這個過期時間的問題。我看網上有提出解決方案的大致有下面幾個

  • 每次更新過期時間,跟session一樣,每次請求的時候都會去更新下token過期時間.但是對於jwt來說,更新過期時間就意味着jwttoken會變,那麼前端就需要每個請求都去保存一次新的token。這樣使得前端的工作變的複雜起來。而且這樣做的話,會存在多個令牌同時有效,可能會引起一些安全問題。
  • 還有一個就是每隔一段時間去更新一次token。這種做法也是很多人採用的一種。比如:token過期時間是一個小時。預設每五十五分鐘去更新token。這種模式也是需要前端去配合完成的。

退出

因爲token在簽發之後在一段時間內是一直有效的,那麼這種情況,我們怎麼去管理登出呢?

  • 簡單的方式就是客戶端直接刪除token。但是這樣的話,如果token泄露了也是不安全的。
  • 有人提出退出的時候將token存放在redis中,過期時間設置爲跟token的時候一樣。當用戶在次用舊的token訪問的時候,如果發現redis中存在token,那麼提示token過期。

對於續期的話,個人覺得第二種方案是比較好的一種方案。而退出的話,如果不考慮泄露的問題,那麼第一種方案是比較好的一種方案。但是如果做SSO的話可能第二種方案是比較好的一種,但是在用到了redis之後就違背了jwt的設計初衷,需要與數據庫交互。
其實個人覺得,jwt的加密方式結合redis這種也是可以採用的。畢竟這些都是爲了解決問題。當利用到redis之後,我們就可以將jwt擴展下。在payload部分加載一個生成的refresh token ,這個refresh token也是有過期時間的,我們需要將這個refresh token存放在redis中。這樣的話,我們就可以把jwt的過期時間放在這個refresh token中維護。續期也就是維護這個refresh token的過期時間,退出的話 也就是刪除這個refresh token就可以了。
其實這樣的話就跟傳統的token驗證一樣了,也就是外層加了一個jwt的驗證。
可能是我對於這方面瞭解的比較少,不能想到什麼有效的方案。這些都是自己對jwt的一些理解。如果哪位大佬有更好的方案,希望賜教。感謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章