JWT過期,修改密碼,登出登入如何處理

winsonink發表於2019-01-19

JWT
使用場景:(自己總結的,每次請求攜帶token,然後到服務端驗證token是否正確,是否過期,然後解碼出攜帶的使用者資訊。服務端不需要再儲存session資訊,避免多點部署帶來session處理的問題。 適合做無狀態使用者請求使用者驗證,避免儲存session)

介紹:
https://jwt.io/introduction/
http://www.jianshu.com/p/576d…
http://www.jianshu.com/p/fcc1…


總結
優點
因為json的通用性,所以JWT是可以進行跨語言支援的,像JAVA,JavaScript,NodeJS,PHP等很多語言都可以使用。
因為有了payload部分,所以JWT可以在自身儲存一些其他業務邏輯所必要的非敏感資訊。
便於傳輸,jwt的構成非常簡單,位元組佔用很小,所以它是非常便於傳輸的。
它不需要在服務端儲存會話資訊, 所以它易於應用的擴充套件

缺點
 - 一旦拿到token, 可用它訪問伺服器,直到過期,中間伺服器無法控制它,如是它失效(有解決方案: 在 token
   中儲存資訊,可新增額外的驗證,如加一個 flag, 把資料庫對應的flag失效,來控制token有效性)。 
 -  token的過期時間設定很關鍵,一般把它設到凌晨少人訪問時失效,以免使用者使用過程中失效而丟失資料。  
 -  token儲存的資訊有限,且都是字串。

安全相關
不應該在jwt的payload部分存放敏感資訊,因為該部分是客戶端可解密的部分。
保護好secret私鑰,該私鑰非常重要。
如果可以,請使用https協議
有人提到jwt暴露簽名演算法(alg),而且會有None(無簽名),所以建議隱去alg。一般的協議制定都會考慮擴充套件性和普適性。但是我們在應用中可以採用我們預設的演算法,而不是根據alg去處理。

作者:Dearmadman
連結:http://www.jianshu.com/p/576dbf44b2ae
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
--------------------- 
作者:o王o 
來源:CSDN 
原文:https://blog.csdn.net/u012129607/article/details/78685356 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

今天討論的主要是 token過期時間的問題
參考 :https://stackoverflow.com/que…

我們的解決方法是:

要求:
①一個賬號僅能有一個token可以使用。
②token設定過期時間
③每次登入,包括token登入都返回一個可用的token給客戶端,保證合理登入的使用者都可以用token,實現token不會過期的效果。

思路:

function  重新整理toke()
{
    token登入和正常賬號密碼登入:
    判斷該使用者(在redis中)是否已經有token,然後判斷這個token建立時間是否當日建立的,如果是當日建立的。則直接返回該token給客戶端。非當日建立的,重新生成一個新token給客戶端
redis中儲存資料結構   token_account_id:111     [`token`=>`aaa` , `create_time` =>1500000];

}

function 根據token獲取使用者資訊(token)
{
    判斷token對錯=》是否過期=》解析出使用者資訊;
   到redis中查該使用者 請求的token 和 redis存的token是否一致,不一致不允許token登入,
   再次根據建立時間,判斷這個token是否可以用(主要防止修改密碼和登出操作的token沒失效問題) 
    最後返回使用者資訊    
}

修改密碼和登出。直接將redis中該使用者的資訊過期。下次通過token登入,會提醒token失效,要重新登入,我們重新生成一個新的token給使用者,然後balaball。。通過redis儲存token,實現 token過期失效的問題了。

jwt採用 H256加密演算法demo:https://github.com/postbird/j…

採用RSA加密演算法demo http://blog.csdn.net/u0121296…

作者:o王o
來源:CSDN
原文:https://blog.csdn.net/u012129…
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章