單點登錄系統設計 胡亂寫的,俺自己都不知道對錯,別當真!!! 1. 系統概述 此系統主要解決多個功能變數名稱情況下,避免用戶反覆性登錄問題。大多數企業初期不需要考慮單點登錄的問題,但是隨著企業逐漸發展壯大遲早會面臨這個問題,作為技術負責人理當重視此事。 2. 業務對象 a) SSO返回給產品的LoginTo ...
單點登錄系統設計
胡亂寫的,俺自己都不知道對錯,別當真!!!
1. 系統概述
此系統主要解決多個功能變數名稱情況下,避免用戶反覆性登錄問題。大多數企業初期不需要考慮單點登錄的問題,但是隨著企業逐漸發展壯大遲早會面臨這個問題,作為技術負責人理當重視此事。
2. 業務對象
- www.abc.com (產品abc) rsc.abc.com(資源伺服器abc)
- www.123.com (產品123) rsc.123.com(資源伺服器123)
- www.sso.com (登錄伺服器SSO) rsc.sso.com(資源伺服器SSO)
- www.jrt.com (授權伺服器JRT) rsc.jrt.com(資源伺服器JRT)
- Token:
a) SSO返回給產品的LoginToken。使用一次之後便無效。
b) 驗證LoginToken返回給產品的ProductToken。產品與sso內部保存。
3. 產品設計
3.1. 業務分析
- SSO登錄流程:產品 --> SSO登錄(SSO_Login) --> 成功 --> 得到LoginToken。
- Token驗證流程:
a) 產品(登錄) --> 驗證Token(訪問SSO_CheckToken) --> 有效 --> 允許使用產品。
b) 產品(登錄) --> 驗證Token(訪問SSO_CheckToken) --> 無效 --> 提示錯誤信息。
3.2. 標準方法
- PRODUCT_AUTO_Logout:只允許SSO伺服器調用此方法。此方法會清除用戶的Session和Token。
- PRODUCT_AUTO_AskStatus:只允許SSO伺服器調用此方法。SSO伺服器詢問是否有效,若用戶的Session有效,則回覆有效,否則回覆無效。
3.3. 重點提示
- 驗證Token的時候,必須帶上”白名單Key(ProductKey)”,否則身份無法驗證通過,程式就更不會驗證Token是否有效。
4. SSO設計
4.1. 業務分析
4.1.1. 白名單
白名單記錄的是允許使用SSO作為登錄系統的產品。超級管理員或程式可以通過調用標準方法:SSO_OPERATE_WhiteList讀取白名單集合。
當產品拿著LoginToken來SSO驗證時,SSO會先調用SSO_CheckProduct驗證ProductKey是否在白名單集合里,之後再驗證LoginToken的有效性。
4.1.2. Token集合
Token集合是以用戶為單位管理的。若一個用戶同時登錄了abc.com和123.com,那麼就會有兩個Token。
SSO_AUTO_CheckExpire方法檢驗用戶Token有效期時,發現所有Token都過了有效期,SSO才會向Token對應的產品發起PRODUCT_AUTO_Logout指令。同時在SSO中銷毀用戶的信息。
4.2. 標準方法
- SSO_Login:輸入www.123.com,未發現有登錄的痕跡,執行用戶登錄。
- SSO_CheckLogin:輸入www.abc.com,abc.com發現123.com已經登錄過了,abc.com自動完成登錄。
- SSO_Logout:用戶主動退出www.123.com,發現還有其他有效Token,則銷毀自己的Token,和建立關聯關係的Token。若發現其他Token全部失效,則銷毀所有Token。
- SSO_ CheckToken:用戶拿著Token使用產品,產品首先調用此方法驗證Token是否有效。驗證時,首先判斷發送請求的產品是否在“白名單集合“,然後再驗證是否有效。
- SSO_CheckProduct:檢查ProductKey是否在“白名單集合“里。
- SSO_AUTO_CheckExpire:迴圈檢查用戶Token有效期。調用SSO_AUTO_AskStatus方法執行校驗。若需要註銷用戶,則通知所有產品Logout(調用產品的PRODUCT_AUTO_Logout方法)。
- SSO_AUTO_AskStatus:向用戶登錄過的所有產品詢問是否有效,若有一個產品回覆有效,則將用戶所有產品的Token更新為最新時間。
- SSO_OPERATE_WhiteList:讀取/刷新白名單集合。
4.3. 重點提示
由於SSO內部需要迴圈檢查Token的有效期,伺服器壓力可能會比較大。可以考慮集群化方案,比如使用RSA加密Token,讓Token包含管理該用戶信息的伺服器地址等數據,產品解密Token按照指定地址驗證Token。
若採用集群化方案,登錄/自動登錄的功能就要改變了,它們需要詢問哪台TokenServer存儲著用戶信息,然後處理具體業務。若詢問不到結果,要以最優的方案選舉一個TokenServer管理用戶信息。
5. JRT伺服器
5.1. SSO資源
- 申請Token,向“JRT伺服器“申請令牌。
- 讀取白名單集合,向“SSO資源伺服器“發起請求。
- 驗證登錄ID和PWD,向“Account資源伺服器“發起請求。
- 刷新Token,向“JRT伺服器“發起請求。
5.2. Product資源
- 申請Token,向“JRT伺服器“申請令牌。
- 讀取用戶信息至於Session里緩存。向“Account資源伺服器“發起請求。
- 執行業務作業。向“Business資源伺服器“發起請求。
- 刷新Token,向“JRT伺服器“發起請求。