XXL-SSO 是一個分佈式單點登陸框架。只須要登陸一次就能夠訪問全部相互信任的應用系統。
擁有"輕量級、分佈式、跨域、Cookie+Token均支持、Web+APP均支持"等特性;。現已開放源代碼,開箱即用。html
源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-sso | Download |
https://gitee.com/xuxueli0323/xxl-sso | Download |
基於Cookie,相關概念可參考 "章節 4.6";git
- xxl-sso-server:中央認證服務,支持集羣; - xxl-sso-core:Client端依賴; - xxl-sso-samples:單點登錄Client端接入示例項目; - xxl-sso-web-sample-springboot:基於Cookie接入方式,供用戶瀏覽器訪問,springboot版本 - xxl-sso-token-sample-springboot:基於Token接入方式,經常使用於沒法使用Cookie的場景使用,如APP、Cookie被禁用等,springboot版本
項目名:xxl-sso-server
配置文件位置:application.propertiesgithub
…… // redis 地址: 如 "{ip}"、"{ip}:{port}"、"{redis/rediss}://xxl-sso:{password}@{ip}:{port:6379}/{db}";多地址逗號分隔 xxl.sso.redis.address=redis://127.0.0.1:6379 // 登陸態有效期窗口,默認24H,當登陸態有效期窗口過半時,自動順延一個週期; xxl.sso.redis.expire.minite=1440
項目名:xxl-sso-web-sample-springboot
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-sso-core</artifactId> <version>${最新穩定版}</version> </dependency>
參考代碼:com.xxl.sso.sample.config.XxlSsoConfigweb
@Bean public FilterRegistrationBean xxlSsoFilterRegistration() { // xxl-sso, redis init JedisUtil.init(xxlSsoRedisAddress); // xxl-sso, filter init FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setName("XxlSsoWebFilter"); registration.setOrder(1); registration.addUrlPatterns("/*"); registration.setFilter(new XxlSsoWebFilter()); registration.addInitParameter(Conf.SSO_SERVER, xxlSsoServer); registration.addInitParameter(Conf.SSO_LOGOUT_PATH, xxlSsoLogoutPath); return registration; }
配置文件位置:application.propertiesredis
…… ### xxl-sso (CLient端SSO配置) ##### SSO Server認證中心地址(推薦以域名方式配置認證中心,本機可參考章節"2.5"修改host文件配置域名指向) xxl.sso.server=http://xxlssoserver.com:8080/xxl-sso-server ##### 註銷登錄path,值爲Client端應用的相對路徑 xxl.sso.logout.path=/logout ##### 路徑排除Path,容許設置多個,且支持Ant表達式。用於排除SSO客戶端不須要過濾的路徑 xxl-sso.excluded.paths= ### redis // redis address, like "{ip}"、"{ip}:{port}"、"{redis/rediss}://xxl-sso:{password}@{ip}:{port:6379}/{db}";Multiple "," separated xxl.sso.redis.address=redis://xxl-sso:password@127.0.0.1:6379/0
環境準備:啓動Redis、初始化Mysql表數據;spring
### 在host文件中添加如下內容0 127.0.0.1 xxlssoserver.com 127.0.0.1 xxlssoclient1.com 127.0.0.1 xxlssoclient2.com
分別運行 "xxl-sso-server" 與 "xxl-sso-web-sample-springboot"sql
一、SSO認證中心地址:
http://xxlssoserver.com:8080/xxl-sso-server數據庫
二、Client01應用地址:
http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/跨域
三、Client02應用地址:
http://xxlssoclient2.com:8081/xxl-sso-web-sample-springboot/瀏覽器
SSO登陸/註銷流程驗證
正常狀況下,登陸流程以下:
一、訪問 "Client01應用地址" ,將會自動 redirect 到 "SSO認證中心地址" 登陸界面;
二、成功登陸後,將會自動 redirect 返回到 "Client01應用地址",並切換爲已登陸狀態;
三、此時,訪問 "Client02應用地址",不需登錄將會自動切換爲已登陸狀態;
正常狀況下,註銷流程以下:
一、訪問 "Client01應用地址" 配置的 "註銷登錄path",將會自動 redirect 到 "SSO認證中心地址" 並自動註銷登錄狀態;
二、此時,訪問 "Client02應用地址",也將會自動註銷登錄狀態;
基於Token,相關概念可參考 "章節 4.7";(在一些沒法使用Cookie的場景下,可以使用該方式,不然能夠忽略本章節)
可參考 "章節二" 搭建;
"認證中心" 搭建成功後,默認爲Token方式登錄提供API接口以下:
項目名:xxl-sso-token-sample-springboot
可參考 "章節 2.4" 部署 "單點登錄Client端接入示例項目",惟一不一樣點是:將web應用的 "XxlSsoFilter" 更換爲app應用 "XxlSsoTokenFilter";
環境準備:啓動Redis、初始化Mysql表數據;
### 在host文件中添加如下內容0 127.0.0.1 xxlssoserver.com 127.0.0.1 xxlssoclient1.com 127.0.0.1 xxlssoclient2.com
分別運行 "xxl-sso-server" 與 "xxl-sso-token-sample-springboot"
一、SSO認證中心地址:
http://xxlssoserver.com:8080/xxl-sso-server
二、Client01應用地址:
http://xxlssoclient1.com:8082/xxl-sso-token-sample-springboot/
三、Client02應用地址:
http://xxlssoclient2.com:8082/xxl-sso-token-sample-springboot/
SSO登陸/註銷流程驗證
可參考測試用例 :com.xxl.app.sample.test.TokenClientTest
正常狀況下,登陸流程以下:
一、獲取用戶輸入的帳號密碼後,請求SSO Server的登陸接口,獲取用戶 sso sessionid ;(參考代碼:TokenClientTest.loginTest)
二、登錄成功後,獲取到 sso sessionid ,須要主動存儲,後續請求時須要設置在 Header參數 中;
三、此時,使用 sso sessionid 訪問受保護的 "Client01應用" 和 "Client02應用" 提供的接口,接口均正常返回;(參考代碼:TokenClientTest.clientApiRequestTest)
正常狀況下,註銷流程以下:
一、請求SSO Server的註銷接口,註銷登錄憑證 sso sessionid ;(參考代碼:TokenClientTest.logoutTest)
二、註銷成功後,sso sessionid 將會全局失效;
三、此時,使用 sso sessionid 訪問受保護的 "Client01應用" 和 "Client02應用" 提供的接口,接口請求將會被攔截,提示未登陸並返回狀態碼 501 ;(參考代碼:TokenClientTest.clientApiRequestTest)
XXL-SSO 是一個分佈式單點登陸框架。只須要登陸一次就能夠訪問全部相互信任的應用系統。
藉助 XXL-SSO,能夠快速實現分佈式系統單點登陸。
概念 | 說明 |
---|---|
SSO Server | 中央認證服務,支持集羣; |
SSO Client | 接入SSO認證中心的Client應用; |
SSO SessionId | 登陸用戶會話ID,SSO 登陸成功爲用戶自動分配; |
SSO User | 登陸用戶信息,與 SSO SessionId 相對應; |
基於Cookie,未登陸狀態請求:
基於Token,未登陸狀態請求:
支持自定義登陸態有效期窗口,默認24H,當登陸態有效期窗口過半時,自動順延一個週期;
未記住密碼時,關閉瀏覽器則登陸態失效;記住密碼時,登陸態自動延期,在自定義延期時間的基礎上,原則上能夠無限延期;
自定義路徑排除Path,容許設置多個,且支持Ant表達式。用於排除SSO客戶端不須要過濾的路徑
歡迎參與項目貢獻!好比提交PR修復一個bug,或者新建 Issue 討論新特性或者變動。
更多接入的公司,歡迎在 登記地址 登記,登記僅僅爲了產品推廣。
產品開源免費,而且將持續提供免費的社區技術支持。我的或企業內部可自由的接入和使用。
不管金額多少都足夠表達您這份心意,很是感謝 :) 前往捐贈