日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式单点登录框架XXL-SSO

發(fā)布時間:2025/7/25 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式单点登录框架XXL-SSO 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

《分布式單點登錄框架XXL-SSO》

一、簡介

1.1 概述

XXL-SSO 是一個分布式單點登錄框架。只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。 擁有"輕量級、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性;。現(xiàn)已開放源代碼,開箱即用。

1.2 特性

  • 1、簡潔:API直觀簡潔,可快速上手;
  • 2、輕量級:環(huán)境依賴小,部署與接入成本較低;
  • 3、單點登錄:只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。
  • 4、分布式:接入SSO認證中心的應用,支持分布式部署;
  • 5、HA:Server端與Client端,均支持集群部署,提高系統(tǒng)可用性;
  • 6、跨域:支持跨域應用接入SSO認證中心;
  • 7、Cookie+Token均支持:支持基于Cookie和基于Token兩種接入方式,并均提供Sample項目;
  • 8、Web+APP均支持:支持Web和APP接入;
  • 9、實時性:系統(tǒng)登陸、注銷狀態(tài),全部Server與Client端實時共享;
  • 10、CS結構:基于CS結構,包括Server"認證中心"與Client"受保護應用";
  • 11、記住密碼:未記住密碼時,關閉瀏覽器則登錄態(tài)失效;記住密碼時,支持登錄態(tài)自動延期,在自定義延期時間的基礎上,原則上可以無限延期;
  • 12、路徑排除:支持自定義多個排除路徑,支持Ant表達式。用于排除SSO客戶端不需要過濾的路徑;

1.3 下載

文檔地址

  • 中文文檔

源碼倉庫地址

源碼倉庫地址Release Download
https://github.com/xuxueli/xxl-ssoDownload
https://gitee.com/xuxueli0323/xxl-ssoDownload

技術交流

  • 社區(qū)交流

1.4 環(huán)境

  • JDK:1.7+
  • Redis:4.0+
  • Mysql:5.6+

二、快速入門(基于Cookie)

基于Cookie,相關概念可參考 "章節(jié) 4.6";

2.1:系統(tǒng)數(shù)據(jù)庫初始化

2.2:源碼編譯

- 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版本

2.3 部署 "認證中心(SSO Server)"

項目名: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)有效期窗口,默認24H,當?shù)卿洃B(tài)有效期窗口過半時,自動順延一個周期; xxl.sso.redis.expire.minite=1440

2.4 部署 "單點登陸Client端接入示例項目"

項目名:xxl-sso-web-sample-springboot

maven依賴

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-sso-core</artifactId><version>${最新穩(wěn)定版}</version> </dependency>

配置 XxlSsoFilter

參考代碼:com.xxl.sso.sample.config.XxlSsoConfig

@Bean public FilterRegistrationBean xxlSsoFilterRegistration() {// xxl-sso, redis initJedisUtil.init(xxlSsoRedisAddress);// xxl-sso, filter initFilterRegistrationBean 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認證中心地址(推薦以域名方式配置認證中心,本機可參考章節(jié)"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

2.5 驗證

  • 環(huán)境準備:啟動Redis、初始化Mysql表數(shù)據(jù);

  • 修改Host文件:域名方式訪問認證中心,模擬跨域與線上真實環(huán)境

### 在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"

    1、SSO認證中心地址: http://xxlssoserver.com:8080/xxl-sso-server

    2、Client01應用地址: http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/

    3、Client02應用地址: http://xxlssoclient2.com:8081/xxl-sso-web-sample-springboot/

  • SSO登錄/注銷流程驗證

    正常情況下,登錄流程如下: 1、訪問 "Client01應用地址" ,將會自動 redirect 到 "SSO認證中心地址" 登錄界面; 2、成功登錄后,將會自動 redirect 返回到 "Client01應用地址",并切換為已登錄狀態(tài); 3、此時,訪問 "Client02應用地址",不需登陸將會自動切換為已登錄狀態(tài);

    正常情況下,注銷流程如下: 1、訪問 "Client01應用地址" 配置的 "注銷登陸path",將會自動 redirect 到 "SSO認證中心地址" 并自動注銷登陸狀態(tài); 2、此時,訪問 "Client02應用地址",也將會自動注銷登陸狀態(tài);

三、快速入門(基于Token)

基于Token,相關概念可參考 "章節(jié) 4.7";(在一些無法使用Cookie的場景下,可使用該方式,否則可以忽略本章節(jié))

3.1 "認證中心(SSO Server)" 搭建

可參考 "章節(jié)二" 搭建;

"認證中心" 搭建成功后,默認為Token方式登陸提供API接口如下:

  • 1、登陸接口:/app/login

    • 參數(shù):POST參數(shù)
      • username:賬號
      • password:賬號
    • 響應:JSON格式
      • code:200 表示成功、其他失敗;
      • msg:錯誤提示
      • data: 登陸用戶的 sso sessionid
  • 2、注銷接口:/app/logout

    • 參數(shù):POST參數(shù)
      • sessionId:登陸用戶的 sso sessionid
    • 響應:JSON格式
      • code:200 表示成功、其他失敗;
      • msg:錯誤提示
  • 3、登陸狀態(tài)校驗接口:/app/logincheck

    • 參數(shù):POST參數(shù)
      • sessionId:登陸用戶的 sso sessionid
    • 響應:JSON格式
      • code:200 表示成功、其他失敗;
      • msg:錯誤提示
      • data:登陸用戶信息
        • userid:用戶ID
        • username:用戶名

2.2 部署 "單點登陸Client端接入示例項目" (Token方式)

項目名:xxl-sso-token-sample-springboot

可參考 "章節(jié) 2.4" 部署 "單點登陸Client端接入示例項目",唯一不同點是:將web應用的 "XxlSsoFilter" 更換為app應用 "XxlSsoTokenFilter";

2.3 驗證 (模擬請求 Token 方式接入SSO的接口)

  • 環(huán)境準備:啟動Redis、初始化Mysql表數(shù)據(jù);

  • 修改Host文件:域名方式訪問認證中心,模擬跨域與線上真實環(huán)境

### 在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"

    1、SSO認證中心地址: http://xxlssoserver.com:8080/xxl-sso-server

    2、Client01應用地址: http://xxlssoclient1.com:8082/xxl-sso-token-sample-springboot/

    3、Client02應用地址: http://xxlssoclient2.com:8082/xxl-sso-token-sample-springboot/

  • SSO登錄/注銷流程驗證

可參考測試用例 :com.xxl.app.sample.test.TokenClientTest

正常情況下,登錄流程如下: 1、獲取用戶輸入的賬號密碼后,請求SSO Server的登錄接口,獲取用戶 sso sessionid ;(參考代碼:TokenClientTest.loginTest) 2、登陸成功后,獲取到 sso sessionid ,需要主動存儲,后續(xù)請求時需要設置在 Header參數(shù) 中; 3、此時,使用 sso sessionid 訪問受保護的 "Client01應用" 和 "Client02應用" 提供的接口,接口均正常返回;(參考代碼:TokenClientTest.clientApiRequestTest)正常情況下,注銷流程如下: 1、請求SSO Server的注銷接口,注銷登陸憑證 sso sessionid ;(參考代碼:TokenClientTest.logoutTest) 2、注銷成功后,sso sessionid 將會全局失效; 3、此時,使用 sso sessionid 訪問受保護的 "Client01應用" 和 "Client02應用" 提供的接口,接口請求將會被攔截,提示未登錄并返回狀態(tài)碼 501 ;(參考代碼:TokenClientTest.clientApiRequestTest)

四、總體設計

4.1 架構圖

4.2 功能定位

XXL-SSO 是一個分布式單點登錄框架。只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。

借助 XXL-SSO,可以快速實現(xiàn)分布式系統(tǒng)單點登錄。

4.3 核心概念

概念說明
SSO Server中央認證服務,支持集群;
SSO Client接入SSO認證中心的Client應用;
SSO SessionId登錄用戶會話ID,SSO 登錄成功為用戶自動分配;
SSO User登錄用戶信息,與 SSO SessionId 相對應;

4.4 登錄流程剖析

  • 用戶于Client端應用訪問受限資源時,將會自動 redirect 到 SSO Server 進入統(tǒng)一登錄界面。
  • 用戶登錄成功之后將會為用戶分配 SSO SessionId 并 redirect 返回來源Client端應用,同時附帶分配的 SSO SessionId。
  • 在Client端的SSO Filter里驗證 SSO SessionId 無誤,將 SSO SessionId 寫入到用戶瀏覽器Client端域名下 cookie 中。
  • SSO Filter驗證 SSO SessionId 通過,受限資源請求放行;

4.5 注銷流程剖析

  • 用戶與Client端應用請求注銷Path時,將會 redirect 到 SSO Server 自動銷毀全局 SSO SessionId,實現(xiàn)全局銷毀;
  • 然后,訪問接入SSO保護的任意Client端應用時,SSO Filter 均會攔截請求并 redirect 到 SSO Server 的統(tǒng)一登錄界面。

4.6 基于Cookie,相關感念

  • 登陸憑證存儲:登陸成功后,用戶登陸憑證被自動存儲在瀏覽器Cookie中;
  • Client端校驗登陸狀態(tài):通過校驗請求Cookie中的是否包含用戶登錄憑證判斷;
  • 系統(tǒng)角色模型:
    • SSO Server:認證中心,提供用戶登陸、注銷以及登陸狀態(tài)校驗等功能。
    • Client應用:受SSO保護的Client端Web應用,為用戶瀏覽器訪問提供服務;
    • 用戶:發(fā)起請求的用戶,使用瀏覽器訪問。

4.7 基于Token,相關感念

  • 登陸憑證存儲:登陸成功后,獲取到登錄憑證(xxl_sso_sessionid=xxx),需要主動存儲,如存儲在 localStorage、Sqlite 中;
  • Client端校驗登陸狀態(tài):通過校驗請求 Header參數(shù) 中的是否包含用戶登錄憑證(xxl_sso_sessionid=xxx)判斷;因此,發(fā)送請求時需要在 Header參數(shù) 中設置登陸憑證;
  • 系統(tǒng)角色模型:
    • SSO Server:認證中心,提供用戶登陸、注銷以及登陸狀態(tài)校驗等功能。
    • Client應用:受SSO保護的Client端Web應用,為用戶請求提供接口服務;
    • 用戶:發(fā)起請求的用戶,如使用Android、IOS、桌面客戶端等請求訪問。

4.8 未登錄狀態(tài)請求處理

基于Cookie,未登錄狀態(tài)請求:

  • 頁面請求:redirect 到SSO Server登錄界面;
  • JSON請求:返回未登錄的JSON格式響應數(shù)據(jù)
    • 數(shù)據(jù)格式:
      • code:501 錯誤碼
      • msg:sso not login.

基于Token,未登錄狀態(tài)請求:

  • 返回未登錄的JSON格式響應數(shù)據(jù)
    • 數(shù)據(jù)格式:
      • code:501 錯誤碼
      • msg:sso not login.

4.9 登錄態(tài)自動延期

支持自定義登錄態(tài)有效期窗口,默認24H,當?shù)卿洃B(tài)有效期窗口過半時,自動順延一個周期;

4.10 記住密碼

未記住密碼時,關閉瀏覽器則登錄態(tài)失效;記住密碼時,登錄態(tài)自動延期,在自定義延期時間的基礎上,原則上可以無限延期;

4.11 路徑排除

自定義路徑排除Path,允許設置多個,且支持Ant表達式。用于排除SSO客戶端不需要過濾的路徑

五、版本更新日志

5.1 版本 v0.1.0,新特性[2018-04-04]

  • 1、簡潔:API直觀簡潔,可快速上手;
  • 2、輕量級:環(huán)境依賴小,部署與接入成本較低;
  • 3、單點登錄:只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。
  • 4、分布式:接入SSO認證中心的應用,支持分布式部署;
  • 5、HA:Server端與Client端,均支持集群部署,提高系統(tǒng)可用性;
  • 6、實時性:系統(tǒng)登陸、注銷狀態(tài),全部Server與Client端實時共享;
  • 7、CS結構:基于CS結構,包括Server"認證中心"與Client"受保護應用";
  • 8、跨域:支持跨域應用接入SSO認證中心;

5.2 版本 v1.1.0 Release Notes [2018-11-06]

  • 1、Redis配置方式增強,支持自定義DB、密碼、IP、PORT等等;;
  • 2、Token接入方式;除了常規(guī)Cookie方式外,新增Token接入方式,并提供Sample項目;
  • 3、登錄態(tài)自動延期:支持自定義登錄態(tài)有效期窗口,默認24H,當?shù)卿洃B(tài)有效期窗口過半時,自動順延一個周期;
  • 4、"記住密碼" 功能優(yōu)化:未記住密碼時,關閉瀏覽器則登錄態(tài)失效;記住密碼時,登錄態(tài)自動延期,在自定義延期時間的基礎上,原則上可以無限延期;
  • 5、sessionId數(shù)據(jù)結構優(yōu)化,進一步提升暴露破解難度;
  • 6、認證數(shù)據(jù)存儲結構調整,避免登陸信息存儲冗余;
  • 7、認證中心用戶登錄校驗改為Mock數(shù)據(jù)方式,取消對DB強依賴,降低部署難度;
  • 8、Client端依賴Core包,slf4j依賴優(yōu)化,移除log4j強依賴;
  • 9、Ajax請求未登錄處理邏輯優(yōu)化,返回JSON格式提示數(shù)據(jù);
  • 10、項目結構梳理,清理冗余依賴,升級多項依賴版本至較近版本;
  • 11、路徑排除:新增自定義屬性 "excludedPaths",允許設置多個,且支持Ant表達式。用于排除SSO客戶端不需要過濾的路徑

5.3 版本 v1.1.1 Release Notes [迭代中]

  • 1、 [迭代中]spring mvc 版本示例;

TODO LIST

  • 1、認證中心與接入端交互數(shù)據(jù)加密,增強安全性;redirect_url必須和臨時AccessToken配合才會生效,AccessToken有效期60s;
  • 2、SSO SessionId 與IP綁定,增強用戶增強安全性;
  • 3、支持認證分組,分組內共享登陸狀態(tài),分組之間登錄態(tài)隔離;待考慮;
  • 4、客戶端新增屬性 "xxl.sso.server",用于構建跳轉連接,防止跳轉第三方導致登陸漏洞;
  • 5、token驗證方式增加jwt方式支持;
  • 6、Client端移除Redis依賴,改為LocalCache + RPC校驗方式;

六、其他

6.1 項目貢獻

歡迎參與項目貢獻!比如提交PR修復一個bug,或者新建 Issue 討論新特性或者變更。

6.2 用戶接入登記

更多接入的公司,歡迎在 登記地址 登記,登記僅僅為了產品推廣。

6.3 開源協(xié)議和版權

產品開源免費,并且將持續(xù)提供免費的社區(qū)技術支持。個人或企業(yè)內部可自由的接入和使用。

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.

捐贈

無論金額多少都足夠表達您這份心意,非常感謝 :) 前往捐贈

轉載于:https://my.oschina.net/xuxueli/blog/1790025

總結

以上是生活随笔為你收集整理的分布式单点登录框架XXL-SSO的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。