單點登入系統架構——淘淘商城(二十三)
阿新 • • 發佈:2019-01-26
SSO
- 單點登入系統(Single Sign On, SSO):在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統,是目前比較流行的企業業務整合的解決方案之一。
會話機制
- http協議是無狀態的,為了鑑別瀏覽器的請求,識別使用者的身份,需要伺服器和客戶端共同維護一個狀態
- 常用的會話機制分為三種類型。詳細講解。
- 基於 session 。伺服器為每一個使用者維持一個session,使用者登入之後使用sessionId標識身份,並通過session中的登入憑證標識登入狀態。
- 基於 cookie 。使用者登入之後將登入憑證做數字簽名和加密之後寫入cookie,之後使用者憑藉cookie標識身份。
- 基於 token 。類似cookies方式,但是不使用cookie而是使用token片段,每次訪問時在url引數或者header中帶上token標識使用者的身份。
- 基於 session 。伺服器為每一個使用者維持一個session,使用者登入之後使用sessionId標識身份,並通過session中的登入憑證標識登入狀態。
傳統登入架構
- 基於session的架構,實現簡單,但是缺點有:伺服器壓力大、叢集部署的session共享問題、cookie跨域問題。
- 其中在叢集部署的時候,session共享問題較為嚴重。
session共享問題
- 叢集環境中,同一個工程會部署在多臺伺服器上,每個工程都有自己獨立的session 。如果工程之間session不共享,在負載均衡伺服器的排程之下,會出現使用者重複登入的情況。
解決session共享問題
配置伺服器
- 可以配置tomcat的session共享,伺服器不停的向叢集中其他的tomcat廣播自己的session資訊,與其他tomcat做session同步。
- 優點:
- 不用修改程式碼就可以實現session共享。
- 缺點:
- 效能受限。tomcat 是全域性session複製,在大規模應用的時候,使用者過多,叢集內tomcat數量過多,session的全域性複製會導致叢集效能下降。這種方式的tomcat 5個以下為好。
- 不能解決跨域的session共享問題。多個有聯絡但分散式部署的工程共享session很難,例如支付寶和淘寶的單點登入問題。
單點登入
- 使用單獨的模組負責使用者登入和session的管理,並將session儲存在redis中。
- 優點:
- 由於redis高併發特性,效能較高。
- 對外提供介面,可以跨域。
- 缺點:
- 增加開發量。
單點登入架構
- 單點登入系統作為服務層的一環,提供使用者的登入和管理服務。
- 登入系統向下在redis中儲存使用者的session,在mysql中儲存和讀取使用者的基本資訊。向上接收使用者登入等請求,並通過token的形式傳遞sessionId(服務層和門戶工程之間無需使用cookie)。
- 使用者登入和查詢訂單的流程如下: