使用者登入設計 單點登入 記住密碼等
最近專案使用者登入的要求有所提高,必須單例項登入,要提供記住密碼功能,使用者登入後會有交易所以必須儘可能提高安全性,所以設計了一下使用者登入結構
IP:使用者IP,用於區分使用者登入所在位置
User:使用者名稱(使用者名稱+Id的Hash串),用於識別使用者
Token:使用者口令(MD5離散隨機數),用於區分單例項登入(每次登入或重新整理SessionCache都會更新)
Series:使用者序列(MD5離散隨機數),用於強制使用者登入會話失效重新登入(密碼發生變更時更新)
一、首先我們要確定兩個規則
1、每次登陸或重新整理Session都要更新Token(確保同一時間只有一個會話登入)
2、任何密碼變更都需要更新Series(確保之前登入資訊失效)
二、cookie中我們儲存兩種資訊(自行選擇如何加密)
不記住密碼
1、Name
2、Token
記住密碼
1、Name
2、Token
3、Series
三、獲取使用者客戶端IP來區分客戶位置
四、處理普通會話與記住密碼會話的邏輯
在這裡是核心判斷的位置,我們從Cookie中拿到所需的內容,判斷一下Cache中是否有這些會話資訊,如果沒有可以直接跳轉登入頁,
如果有再進行以下判斷:
1、Name是否與Cache一致
2、IP是否與Cache一致(驗證當前為同一個例項訪問)
3、Token是否與Cache一致(驗證當前為同一個例項登入)
4、Series是否與DB一致(驗證當前賬戶未更新過密碼)
結果:
2不一致(使用者訪問位置異常)
3不一致(使用者登入異常)
異常登入提示賬戶風險,可以引導使用者修改密碼
4不一致(更新過密碼)
可以引導使用者重新登入
如果是記住密碼那Cache沒有就不能直接跳回登入頁了,而是核實一下Cookie的內容自動登入,登入需要核實一下幾點:
1、Name是否與DB一致
2、Series是否與DB一致
3、酌情判斷常用IP記錄裡是否有當前IP
如果通過作如下操作:
新建Session Cache
存入新Token等
五、我們將Session存到Cache中,大部分使用者資訊在DB中
總體設計如下圖(圖太大了可以圖片另存為下載檢視):
一點見解,IP部分不好控制還需要調優,如果有建議還望指導,謝謝