用戶登錄設計 單點登錄 記住密碼等


最近項目用戶登錄的要求有所提高,必須單實例登錄,要提供記住密碼功能,用戶登錄后會有交易所以必須盡可能提高安全性,所以設計了一下用戶登錄結構

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM