在使用
jwt
的過程當中發現了兩個問題
續期和
退出的問題。
由於jwt
的token
在簽發以後是有過時時間的,因此就存在管理這個過時時間的問題。我看網上有提出解決方案的大體有下面幾個前端
token
過時時間.可是對於jwt
來講,更新過時時間就意味着jwt
的token
會變,那麼前端就須要每一個請求都去保存一次新的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