關於Jwt的一些思考

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

續期

由於jwttoken在簽發以後是有過時時間的,因此就存在管理這個過時時間的問題。我看網上有提出解決方案的大體有下面幾個前端

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

退出

由於token在簽發以後在一段時間內是一直有效的,那麼這種狀況,咱們怎麼去管理登出呢?redis

  • 簡單的方式就是客戶端直接刪除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的一些理解。若是哪位大佬有更好的方案,但願賜教。感謝數據庫

原文地址:https://segmentfault.com/a/1190000016650479segmentfault

相關文章
相關標籤/搜索