SSO 單點登入理解及其解決方案

2021-08-24 20:14:26 字數 973 閱讀 1820

由於專案越來越大,大多專案開始拆分,如乙個電商系統可以拆分成,使用者系統(例如8080埠),訂單系統(例如8085埠),支付系統(例如9091埠)等~甚至很多服務會進行拆分,會做soa服務,會使用dubbo做微服務,或者簡單的小型分布式,這樣在服務與服務之間,或者系統與系統之間都是通過http或者restful來進行通訊的

同乙個大專案中,應該只登入一次,就能訪問各個拆分的專案;(通過使用者名稱密碼登入使用者系統,同時也能訪問訂單系統和支付系統,無需重新登入);

在以往的單系統應用中,我們都是把user存入session中的,需要用到的時候隨時取,如果取不到就跳轉到登入註冊頁面,非常簡單的原理;但是在現如今的分布式應用中,如何保證session同步呢?

比如訂單服務是在order.jd.com;購物車服務在 cart.jd.com;

那麼這2個二級網域名稱下的使用者資訊如何實現同步呢?

一般通過sso單點登入的方式達到該效果,保證乙個賬戶在多個系統上實現單一使用者的登入;

自行開發一套單點登入系統(sso),比如就使用 sso.jd.com,可以在這個二級網域名稱下進行登入和註冊,登入和註冊都是以restful形式,為了可以同時提供給cms以及手機端的支援;

登陸後把使用者的相關資訊存入redis,redis設定好過期時間,key為乙個token,使用uuid,uuid生成後需要存入cookie中,失效時間隨意定,但是再登入後需要重置redis和cookie中的失效時間;

具體實現:通過spring-session實現。在springmvc中配置,在pom檔案中新增依賴,在web.xml中新增過濾器配置;

1)多台tomcat(中介軟體)---可以直接理解為多台伺服器儲存session,通過ip-hash演算法實現大致的負載均衡;(不安全)

2)多台tomcat(中介軟體)---每一台都相互連線,複製,保證資料不會丟失;

3)分散到多個tomcat(中介軟體)通過hash分散,並將所有的session資料存入redis集群;(常用)

SSO 單點登入完全解決方案 參考

2007年8月6日 11 49 03 發布 yaosansi sso 單點登入完全解決方案單點登入解決方案 sso解決方案 單點登入,跨域訪問,單點登陸,使用者跨域,跨域登入,跨域登陸解決方案 伺服器端可控情形js跨域訪問解決方法 單點登入的簡單實現 php實現webservices和跨域自動登陸 ...

單點登入解決方案

本文只是簡述單點登入解決方案,系統其他方面均省略 如上圖 系統基本架構 fr與es分為兩個不同的子專案,前端請求均通過訪問fr,由fr通過httpurlconnection訪問es 賦能層 fr主要作用為登入鑑權。大致請求流程如下 1 password md5單向加密成新的password 1 如 ...

基於redis的單點登入解決方案

單點登入有兩種模型,一種是共同父域下的單點登入 例如網域名稱都是 xx.a.com 還有就是完全跨域下的單點登入 例如網域名稱是xx.a.com,xx.b.com 本文我們講一下完全跨域下的單點登入該怎麼實現。基於安全考慮,想通過cookie來實現這個功能是不太可能的了 也許有其他黑科技可以實現,這...