本期推荐的是一个分布式单点登录框架——XXL-SSO。
XXL-SSO 是一个分布式单点登录框架。用户只需要登录一次就可以访问所有相互信任的应用系统。至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,包括:大众点评、优信二手车、咪咕互动、浪潮软件、360金融、摩贝科技、联想、京东、恒大、网易易信、滴答出行、虎牙等500+企业,目前XXL-JOB已经完全开放源代码,开箱即用。
框架的主要特性:
- API简洁直观,易上手
- 对环境的依赖较小,部署与接入成本低
- 支持分布式部署
- Server端与Client端均支持集群部署
- 支持跨域应用接入SSO认证中心
- 支持基于Cookie和基于Token两种接入方式
- 支持Web和APP接入
- 系统登陆、注销状态,全部Server与Client端实时共享
架构图:
快速入门(Cookie示例):
1、源码编译
- 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、部署 “认证中心(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.minute=1440
3、部署 “单点登陆Client端接入示例项目”
项目名:xxl-sso-web-sample-springboot
maven依赖
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-sso-core</artifactId> <version>${最新稳定版}</version></dependency>
配置 XxlSsoFilter
参考代码:com.xxl.sso.sample.config.XxlSsoConfig
@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
4、验证
修改Host文件:域名方式访问认证中心,模拟跨域与线上真实环境
### 在host文件中添加以下内容127.0.0.1 xxlssoserver.com127.0.0.1 xxlssoclient1.com127.0.0.1 xxlssoclient2.com
分别运行 “xxl-sso-server” 与 “xxl-sso-web-sample-springboot”
分别运行 “xxl-sso-server” 与 “xxl-sso-web-sample-springboot”1、SSO认证中心地址:http://xxlssoserver.com:8080/xxl-sso-server2、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应用地址",也将会自动注销登陆状态
更多内容大家可自行前往阅读。
开源地址:gitee.com/xuxueli0323/xxl-sso
如需项目推荐、获取资源请私信作者