1. 程式人生 > >使用者登入設計 單點登入 記住密碼等

使用者登入設計 單點登入 記住密碼等

最近專案使用者登入的要求有所提高,必須單例項登入,要提供記住密碼功能,使用者登入後會有交易所以必須儘可能提高安全性,所以設計了一下使用者登入結構

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部分不好控制還需要調優,如果有建議還望指導,謝謝