您好,登錄后才能下訂單哦!
本篇文章為大家展示了XXL-SSO分布式單點登錄框架是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
XXL-SSO 是一個分布式單點登錄框架。只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
擁有"輕量級、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性?,F(xiàn)已開放源代碼,開箱即用。
簡潔:API直觀簡潔,可快速上手;
輕量級:環(huán)境依賴小,部署與接入成本較低;
單點登錄:只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
分布式:接入SSO認(rèn)證中心的應(yīng)用,支持分布式部署;
HA:Server端與Client端,均支持集群部署,提高系統(tǒng)可用性;
跨域:支持跨域應(yīng)用接入SSO認(rèn)證中心;
Cookie+Token均支持:支持基于Cookie和基于Token兩種接入方式,并均提供Sample項目;
Web+APP均支持:支持Web和APP接入;
實時性:系統(tǒng)登陸、注銷狀態(tài),全部Server與Client端實時共享;
CS結(jié)構(gòu):基于CS結(jié)構(gòu),包括Server"認(rèn)證中心"與Client"受保護(hù)應(yīng)用";
記住密碼:未記住密碼時,關(guān)閉瀏覽器則登錄態(tài)失效;記住密碼時,支持登錄態(tài)自動延期,在自定義延期時間的基礎(chǔ)上,原則上可以無限延期;
路徑排除:支持自定義多個排除路徑,支持Ant表達(dá)式。用于排除SSO客戶端不需要過濾的路徑;
源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-sso | Download |
https://gitee.com/xuxueli0323/xxl-sso | Download |
- xxl-sso-server:中央認(rèn)證服務(wù),支持集群; - 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.properties
…… // redis 地址: 如 "{ip}"、"{ip}:{port}"、"{redis/rediss}://xxl-sso:{password}@{ip}:{port:6379}/{db}";多地址逗號分隔 xxl.sso.redis.address=redis://127.0.0.1:6379 // 登錄態(tài)有效期窗口,默認(rèn)24H,當(dāng)?shù)卿洃B(tài)有效期窗口過半時,自動順延一個周期; xxl.sso.redis.expire.minite=1440
項目名:xxl-sso-web-sample-springboot
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-sso-core</artifactId> <version>${最新穩(wěn)定版}</version> </dependency>
@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.properties
…… ### xxl-sso (CLient端SSO配置) ##### SSO Server認(rèn)證中心地址(推薦以域名方式配置認(rèn)證中心,本機(jī)可參考章節(jié)"2.5"修改host文件配置域名指向) xxl.sso.server=http://xxlssoserver.com:8080/xxl-sso-server ##### 注銷登陸path,值為Client端應(yīng)用的相對路徑 xxl.sso.logout.path=/logout ##### 路徑排除Path,允許設(shè)置多個,且支持Ant表達(dá)式。用于排除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
環(huán)境準(zhǔn)備:啟動Redis、初始化Mysql表數(shù)據(jù);
修改Host文件:域名方式訪問認(rèn)證中心,模擬跨域與線上真實環(huán)境
### 在host文件中添加以下內(nèi)容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"
1、SSO認(rèn)證中心地址:
http://xxlssoserver.com:8080/xxl-sso-server
2、Client01應(yīng)用地址:
http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/
3、Client02應(yīng)用地址:
http://xxlssoclient2.com:8081/xxl-sso-web-sample-springboot/
SSO登錄/注銷流程驗證
正常情況下,登錄流程如下:
1、訪問 "Client01應(yīng)用地址" ,將會自動 redirect 到 "SSO認(rèn)證中心地址" 登錄界面;
2、成功登錄后,將會自動 redirect 返回到 "Client01應(yīng)用地址",并切換為已登錄狀態(tài);
3、此時,訪問 "Client02應(yīng)用地址",不需登陸將會自動切換為已登錄狀態(tài);
正常情況下,注銷流程如下:
1、訪問 "Client01應(yīng)用地址" 配置的 "注銷登陸path",將會自動 redirect 到 "SSO認(rèn)證中心地址" 并自動注銷登陸狀態(tài);
2、此時,訪問 "Client02應(yīng)用地址",也將會自動注銷登陸狀態(tài);
"認(rèn)證中心" 搭建成功后,默認(rèn)為Token方式登陸提供API接口如下:
1、登陸接口:/app/login
code:200 表示成功、其他失??;
msg:錯誤提示
data: 登陸用戶的 sso sessionid
username:賬號
password:賬號
參數(shù):POST參數(shù)
響應(yīng):JSON格式
2、注銷接口:/app/logout
code:200 表示成功、其他失敗;
msg:錯誤提示
sessionId:登陸用戶的 sso sessionid
參數(shù):POST參數(shù)
響應(yīng):JSON格式
3、登陸狀態(tài)校驗接口:/app/logincheck
code:200 表示成功、其他失??;
msg:錯誤提示
data:登陸用戶信息
userid:用戶ID
username:用戶名
sessionId:登陸用戶的 sso sessionid
參數(shù):POST參數(shù)
響應(yīng):JSON格式
項目名:xxl-sso-token-sample-springboot
可參考 "章節(jié) 2.4" 部署 "單點登陸Client端接入示例項目",唯一不同點是:將web應(yīng)用的 "XxlSsoFilter" 更換為app應(yīng)用 "XxlSsoTokenFilter";
環(huán)境準(zhǔn)備:啟動Redis、初始化Mysql表數(shù)據(jù);
修改Host文件:域名方式訪問認(rèn)證中心,模擬跨域與線上真實環(huán)境
### 在host文件中添加以下內(nèi)容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"
1、SSO認(rèn)證中心地址:
http://xxlssoserver.com:8080/xxl-sso-server
2、Client01應(yīng)用地址:
http://xxlssoclient1.com:8082/xxl-sso-token-sample-springboot/
3、Client02應(yīng)用地址:
http://xxlssoclient2.com:8082/xxl-sso-token-sample-springboot/
SSO登錄/注銷流程驗證
正常情況下,登錄流程如下:
1、獲取用戶輸入的賬號密碼后,請求SSO Server的登錄接口,獲取用戶 sso sessionid ;(參考代碼:TokenClientTest.loginTest)
2、登陸成功后,獲取到 sso sessionid ,需要主動存儲,后續(xù)請求時需要設(shè)置在 Header參數(shù) 中;
3、此時,使用 sso sessionid 訪問受保護(hù)的 "Client01應(yīng)用" 和 "Client02應(yīng)用" 提供的接口,接口均正常返回;(參考代碼:TokenClientTest.clientApiRequestTest)
正常情況下,注銷流程如下:
1、請求SSO Server的注銷接口,注銷登陸憑證 sso sessionid ;(參考代碼:TokenClientTest.logoutTest)
2、注銷成功后,sso sessionid 將會全局失效;
3、此時,使用 sso sessionid 訪問受保護(hù)的 "Client01應(yīng)用" 和 "Client02應(yīng)用" 提供的接口,接口請求將會被攔截,提示未登錄并返回狀態(tài)碼 501 ;(參考代碼:TokenClientTest.clientApiRequestTest)
XXL-SSO 是一個分布式單點登錄框架。只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。借助 XXL-SSO,可以快速實現(xiàn)分布式系統(tǒng)單點登錄。
概念 | 說明 |
---|---|
SSO Server | 中央認(rèn)證服務(wù),支持集群; |
SSO Client | 接入SSO認(rèn)證中心的Client應(yīng)用; |
SSO SessionId | 登錄用戶會話ID,SSO 登錄成功為用戶自動分配; |
SSO User | 登錄用戶信息,與 SSO SessionId 相對應(yīng); |
用戶于Client端應(yīng)用訪問受限資源時,將會自動 redirect 到 SSO Server 進(jìn)入統(tǒng)一登錄界面。
用戶登錄成功之后將會為用戶分配 SSO SessionId 并 redirect 返回來源Client端應(yīng)用,同時附帶分配的 SSO SessionId。
在Client端的SSO Filter里驗證 SSO SessionId 無誤,將 SSO SessionId 寫入到用戶瀏覽器Client端域名下 cookie 中。
SSO Filter驗證 SSO SessionId 通過,受限資源請求放行;
用戶與Client端應(yīng)用請求注銷Path時,將會 redirect 到 SSO Server 自動銷毀全局 SSO SessionId,實現(xiàn)全局銷毀;
然后,訪問接入SSO保護(hù)的任意Client端應(yīng)用時,SSO Filter 均會攔截請求并 redirect 到 SSO Server 的統(tǒng)一登錄界面。
登陸憑證存儲:登陸成功后,用戶登陸憑證被自動存儲在瀏覽器Cookie中;
Client端校驗登陸狀態(tài):通過校驗請求Cookie中的是否包含用戶登錄憑證判斷;
系統(tǒng)角色模型:
SSO Server:認(rèn)證中心,提供用戶登陸、注銷以及登陸狀態(tài)校驗等功能。
Client應(yīng)用:受SSO保護(hù)的Client端Web應(yīng)用,為用戶瀏覽器訪問提供服務(wù);
用戶:發(fā)起請求的用戶,使用瀏覽器訪問。
登陸憑證存儲:登陸成功后,獲取到登錄憑證(xxl_sso_sessionid=xxx),需要主動存儲,如存儲在 localStorage、Sqlite 中;
Client端校驗登陸狀態(tài):通過校驗請求 Header參數(shù) 中的是否包含用戶登錄憑證(xxl_sso_sessionid=xxx)判斷;因此,發(fā)送請求時需要在 Header參數(shù) 中設(shè)置登陸憑證;
系統(tǒng)角色模型:
SSO Server:認(rèn)證中心,提供用戶登陸、注銷以及登陸狀態(tài)校驗等功能。
Client應(yīng)用:受SSO保護(hù)的Client端Web應(yīng)用,為用戶請求提供接口服務(wù);
用戶:發(fā)起請求的用戶,如使用Android、IOS、桌面客戶端等請求訪問。
基于Cookie,未登錄狀態(tài)請求:
頁面請求:redirect 到SSO Server登錄界面;
JSON請求:返回未登錄的JSON格式響應(yīng)數(shù)據(jù)
code:501 錯誤碼
msg:sso not login.
數(shù)據(jù)格式:
基于Token,未登錄狀態(tài)請求:
返回未登錄的JSON格式響應(yīng)數(shù)據(jù)
code:501 錯誤碼
msg:sso not login.
數(shù)據(jù)格式:
支持自定義登錄態(tài)有效期窗口,默認(rèn)24H,當(dāng)?shù)卿洃B(tài)有效期窗口過半時,自動順延一個周期;
未記住密碼時,關(guān)閉瀏覽器則登錄態(tài)失效;記住密碼時,登錄態(tài)自動延期,在自定義延期時間的基礎(chǔ)上,原則上可以無限延期;
自定義路徑排除Path,允許設(shè)置多個,且支持Ant表達(dá)式。用于排除SSO客戶端不需要過濾的路徑
上述內(nèi)容就是XXL-SSO分布式單點登錄框架是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。