千家信息网

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

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇文章为大家展示了XXL-SSO分布式单点登录框架是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、简介1.1 概述XXL-SSO 是一个分布式单点登
千家信息网最后更新 2024年11月23日XXL-SSO分布式单点登录框架是什么

本篇文章为大家展示了XXL-SSO分布式单点登录框架是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、简介

1.1 概述

XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。
拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性。现已开放源代码,开箱即用。

1.2 特性

  • 简洁:API直观简洁,可快速上手;

  • 轻量级:环境依赖小,部署与接入成本较低;

  • 单点登录:只需要登录一次就可以访问所有相互信任的应用系统。

  • 分布式:接入SSO认证中心的应用,支持分布式部署;

  • HA:Server端与Client端,均支持集群部署,提高系统可用性;

  • 跨域:支持跨域应用接入SSO认证中心;

  • Cookie+Token均支持:支持基于Cookie和基于Token两种接入方式,并均提供Sample项目;

  • Web+APP均支持:支持Web和APP接入;

  • 实时性:系统登陆、注销状态,全部Server与Client端实时共享;

  • CS结构:基于CS结构,包括Server"认证中心"与Client"受保护应用";

  • 记住密码:未记住密码时,关闭浏览器则登录态失效;记住密码时,支持登录态自动延期,在自定义延期时间的基础上,原则上可以无限延期;

  • 路径排除:支持自定义多个排除路径,支持Ant表达式。用于排除SSO客户端不需要过滤的路径;

1.3 下载

源码仓库地址
源码仓库地址Release Download
https://github.com/xuxueli/xxl-ssoDownload
https://gitee.com/xuxueli0323/xxl-ssoDownload

1.4 环境

  • JDK:1.7+

  • Redis:4.0+

  • Mysql:5.6+

二、快速入门(基于Cookie)

2.1:系统数据库初始化

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// 登录态有效期窗口,默认24H,当登录态有效期窗口过半时,自动顺延一个周期;xxl.sso.redis.expire.minite=1440

2.4 部署 "单点登陆Client端接入示例项目"

项目名:xxl-sso-web-sample-springboot
maven依赖
    com.xuxueli    xxl-sso-core    ${最新稳定版}
配置 XxlSsoFilter
@Beanpublic 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认证中心地址(推荐以域名方式配置认证中心,本机可参考章节"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 "," separatedxxl.sso.redis.address=redis://xxl-sso:password@127.0.0.1:6379/0

2.5 验证

  • 环境准备:启动Redis、初始化Mysql表数据;

  • 修改Host文件:域名方式访问认证中心,模拟跨域与线上真实环境

### 在host文件中添加以下内容0127.0.0.1 xxlssoserver.com127.0.0.1 xxlssoclient1.com127.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应用地址",并切换为已登录状态;
    3、此时,访问 "Client02应用地址",不需登陆将会自动切换为已登录状态;

    正常情况下,注销流程如下:
    1、访问 "Client01应用地址" 配置的 "注销登陆path",将会自动 redirect 到 "SSO认证中心地址" 并自动注销登陆状态;
    2、此时,访问 "Client02应用地址",也将会自动注销登陆状态;

三、快速入门(基于Token)

3.1 "认证中心(SSO Server)" 搭建

"认证中心" 搭建成功后,默认为Token方式登陆提供API接口如下:

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

    • code:200 表示成功、其他失败;

    • msg:错误提示

    • data: 登陆用户的 sso sessionid

    • username:账号

    • password:账号

    • 参数:POST参数

    • 响应:JSON格式

  • 2、注销接口:/app/logout

    • code:200 表示成功、其他失败;

    • msg:错误提示

    • sessionId:登陆用户的 sso sessionid

    • 参数:POST参数

    • 响应:JSON格式

  • 3、登陆状态校验接口:/app/logincheck

    • code:200 表示成功、其他失败;

    • msg:错误提示

    • data:登陆用户信息

    • userid:用户ID

    • username:用户名

    • sessionId:登陆用户的 sso sessionid

    • 参数:POST参数

    • 响应:JSON格式

3.2 部署 "单点登陆Client端接入示例项目" (Token方式)

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

可参考 "章节 2.4" 部署 "单点登陆Client端接入示例项目",唯一不同点是:将web应用的 "XxlSsoFilter" 更换为app应用 "XxlSsoTokenFilter";

3.3 验证 (模拟请求 Token 方式接入SSO的接口)

  • 环境准备:启动Redis、初始化Mysql表数据;

  • 修改Host文件:域名方式访问认证中心,模拟跨域与线上真实环境

### 在host文件中添加以下内容0127.0.0.1 xxlssoserver.com127.0.0.1 xxlssoclient1.com127.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登录/注销流程验证

    正常情况下,登录流程如下:
    1、获取用户输入的账号密码后,请求SSO Server的登录接口,获取用户 sso sessionid ;(参考代码:TokenClientTest.loginTest)
    2、登陆成功后,获取到 sso sessionid ,需要主动存储,后续请求时需要设置在 Header参数 中;
    3、此时,使用 sso sessionid 访问受保护的 "Client01应用" 和 "Client02应用" 提供的接口,接口均正常返回;(参考代码:TokenClientTest.clientApiRequestTest)

    正常情况下,注销流程如下:
    1、请求SSO Server的注销接口,注销登陆凭证 sso sessionid ;(参考代码:TokenClientTest.logoutTest)
    2、注销成功后,sso sessionid 将会全局失效;
    3、此时,使用 sso sessionid 访问受保护的 "Client01应用" 和 "Client02应用" 提供的接口,接口请求将会被拦截,提示未登录并返回状态码 501 ;(参考代码:TokenClientTest.clientApiRequestTest)

四、总体设计

4.1 功能定位

XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。借助 XXL-SSO,可以快速实现分布式系统单点登录。

4.2 核心概念

概念说明
SSO Server中央认证服务,支持集群;
SSO Client接入SSO认证中心的Client应用;
SSO SessionId登录用户会话ID,SSO 登录成功为用户自动分配;
SSO User登录用户信息,与 SSO SessionId 相对应;

4.3 登录流程剖析

  • 用户于Client端应用访问受限资源时,将会自动 redirect 到 SSO Server 进入统一登录界面。

  • 用户登录成功之后将会为用户分配 SSO SessionId 并 redirect 返回来源Client端应用,同时附带分配的 SSO SessionId。

  • 在Client端的SSO Filter里验证 SSO SessionId 无误,将 SSO SessionId 写入到用户浏览器Client端域名下 cookie 中。

  • SSO Filter验证 SSO SessionId 通过,受限资源请求放行;

4.4 注销流程剖析

  • 用户与Client端应用请求注销Path时,将会 redirect 到 SSO Server 自动销毁全局 SSO SessionId,实现全局销毁;

  • 然后,访问接入SSO保护的任意Client端应用时,SSO Filter 均会拦截请求并 redirect 到 SSO Server 的统一登录界面。

4.5 基于Cookie

  • 登陆凭证存储:登陆成功后,用户登陆凭证被自动存储在浏览器Cookie中;

  • Client端校验登陆状态:通过校验请求Cookie中的是否包含用户登录凭证判断;

  • 系统角色模型:

    • SSO Server:认证中心,提供用户登陆、注销以及登陆状态校验等功能。

    • Client应用:受SSO保护的Client端Web应用,为用户浏览器访问提供服务;

    • 用户:发起请求的用户,使用浏览器访问。

4.6 基于Token

  • 登陆凭证存储:登陆成功后,获取到登录凭证(xxl_sso_sessionid=xxx),需要主动存储,如存储在 localStorage、Sqlite 中;

  • Client端校验登陆状态:通过校验请求 Header参数 中的是否包含用户登录凭证(xxl_sso_sessionid=xxx)判断;因此,发送请求时需要在 Header参数 中设置登陆凭证;

  • 系统角色模型:

    • SSO Server:认证中心,提供用户登陆、注销以及登陆状态校验等功能。

    • Client应用:受SSO保护的Client端Web应用,为用户请求提供接口服务;

    • 用户:发起请求的用户,如使用Android、IOS、桌面客户端等请求访问。

4.7 未登录状态请求处理

基于Cookie,未登录状态请求:

  • 页面请求:redirect 到SSO Server登录界面;

  • JSON请求:返回未登录的JSON格式响应数据

    • code:501 错误码

    • msg:sso not login.

    • 数据格式:

基于Token,未登录状态请求:

  • 返回未登录的JSON格式响应数据

    • code:501 错误码

    • msg:sso not login.

    • 数据格式:

4.8 登录态自动延期

支持自定义登录态有效期窗口,默认24H,当登录态有效期窗口过半时,自动顺延一个周期;

4.9 记住密码

未记住密码时,关闭浏览器则登录态失效;记住密码时,登录态自动延期,在自定义延期时间的基础上,原则上可以无限延期;

4.10 路径排除

自定义路径排除Path,允许设置多个,且支持Ant表达式。用于排除SSO客户端不需要过滤的路径

上述内容就是XXL-SSO分布式单点登录框架是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

登录 应用 登陆 用户 认证 地址 支持 状态 接入 接口 成功 单点 参数 方式 系统 路径 配置 分布式 凭证 流程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 成都网络安全大赛 做单片机软件开发怎么样 鬼泣巅峰之战服务器下载 怎么查电脑服务器id 软件开发公司会计核算 如何远程管理单位的服务器 黑马品优购数据库技术 部队关于手机网络安全的心得体会 广西公安厅软件开发 网络安全行为红线公安 上海德斌软件开发有限公司 数据库表的多表查询实验总结 计算机网络技术学习前提 国家网络法对网络安全非常重视 湖南服务器机柜现货 数据库安全技术要求 学校电脑怎么查老师服务器ip 江苏综合软件开发质量保障 红花岗区网络安全 数据库的考题 单片机软件开发面试题目 网络安全法 试题答案及解析 计算机网络技术学习前提 广州中专学校软件开发推荐 从另外一台服务器拉取文件 c 通用数据库连接类 机架式服务器和工作站差别 软件开发字体黑色是什么代码 强化网络安全特色党日活动 简述网络安全包含哪几方面
0