2.2k star 单点登录框架揭秘!主流SSO太重?SpringBoot轻量级Smart‑SSO轻松接入·分布式·强踢人

简介: Smart-SSO 是一个基于 SpringBoot 的轻量级单点登录框架,采用 OAuth2 授权码与 RBAC 权限设计,解决跨域认证、单点退出、令牌过期等痛点。支持自动续签、强制踢人、按钮级权限控制及分布式部署,适合中小团队快速构建高可用认证中台。项目已获 2.2k Star,代码开源,接入简单,是企业级应用的理想选择。[详情见 GitHub](https://github.com/a466350665/smart-sso)。

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先行业一步。👉免费订阅,与10万+技术人共享升级秘籍!

Smart‑SSO 依托当下备受青睐的 SpringBoot 技术,以 OAuth2 认证结合 RBAC 权限设计为基础,为您塑造一个轻量级、高可用的单点认证授权中心

引入痛点场景

许多企业级应用在面对复杂流程时会遇到如下问题:

  • 跨域认证难题:多个应用分域部署,Cookie 无法共享,用户频繁登录体验差。
  • 单点退出复杂:退出一个系统,其他系统仍然保持登录状态,体验不一致。
  • 踢人下线不安全:管理员无法实时终止指定用户会话。
  • 令牌过期引发中断:access token 一过期,服务请求失败,用户不知所措。
  • 按钮级权限需求迫切:不只是页面访问,操作按钮也需细粒度控制。
  • 分布式部署与高可用:多实例部署时,Token 无共享机制引发一致性问题。

核心功能亮点

轻量级 OAuth2 授权码实现

  • 基于 SpringBoot 和 OAuth2 授权码标准流程,简洁、开箱即用。
  • 得益于 starter 模块,即刻启动 SSO 中心与客户端集成。

单点退出机制

  • 客户端获取 Token 时传入注销地址;服务器端登出推送各客户端,实现统一退出。

自动续签(Silent Refresh)

  • 客户端后端自动监听 accessToken 过期,调用 refreshToken 接口平滑续签,增强用户体验。

强制踢人下线

  • 管理员可实时吊销某用户登录凭证;SSO 中心通知所有客户端立即失效该用户 sessions。

跨域支持 & 前后端分离

  • 支持多域名部署,无 Cookie 模式下也可灵活实施认证和登出机制。

按钮级权限控制

  • 权限模型可区分菜单级和按钮级,通过 URI + HTTP 方法精准控制接口访问。

分布式部署及 Redis 支持

  • Token 存储可接 Redis 集群,支持多实例部署,解决空状态、负载问题。

技术架构图与优势

整体架构图

单点登录原理

单点退出原理

项目结构

smart-sso
├── smart-sso-demo -- 客户端示例
├── smart-sso-demo-h5 -- 前后端分离客户端示例
├── smart-sso-server -- 单点登录权限管理服务端
├── smart-sso-starter -- 依赖装配模块
│   ├── smart-sso-starter-base -- 公用的基础常量、工具、凭证清理机制
│   ├── smart-sso-starter-client -- 客户端依赖包,客户端Token生命周期管理
│   ├── smart-sso-starter-client-redis -- 客户端依赖装配,分布式部署场景redis支持
│   ├── smart-sso-starter-server -- 服务端依赖包,服务端凭证生命周期管理
│   ├── smart-sso-starter-server-redis -- 服务端依赖装配,分布式部署场景redis支持

技术优势整理

维度 优势
认证机制 OAuth2 授权码规范 + RBAC,安全合规
Token 管理 Access+Refresh 双机制,自动续签+踢人控制
分布式能力 Redis 支持,多节点无状态扩展
易用性 SpringBoot starter 快速集成
权限粒度 菜单级 + 按钮级控制,接口防护更精准
跨域支持 支持无 Cookie 架构下的 SPA 应用认证

界面效果展示

单点登录页

用户输入账号密码后重定向至客户端,体验无缝流畅。

客户端登录成功页

成功获取 Token 后显示欢迎界面,并可访问更多功能。

SSO 管控后台

展示当前在线用户、Token 列表、刷新历史记录界面。

单点退出与踢人功能

一键下线,实时通知所有客户端,即刻生效。

应用场景举例

  • 微服务架构中心认证:多个子系统共享认证中心。
  • 前后端分离 SPA:Vue/React 应用中轻松使用。
  • B2B 平台权限精细化控制:按钮级区分管理员与普通用户操作权限。
  • 高并发分布式系统:多实例部署,Redis 做缓存和会话同步。
  • 安全敏感系统:支持单点退出、踢人、Refresh 逻辑,保障资产安全。

同类项目对比分析

项目 授权协议 单点退出 自动续签 按钮权限 分布式 入门便利
Smart‑SSO OAuth2 授权码 ✅推送登出通知 ✅Refresh 支持 ✅URI+方法 ✅Redis ✅starter 模块
Keycloak OAuth2 + OpenID ✅SPM 内建 ✅Refresh 支持 ✅稍微复杂 ✅集群 ❌较重,需管理
CAS Proprietary ✅Logout ❌无内置续签 ❌需扩展 ✅集群 ❌非 OAuth2 标准
自研 JWT JWT ❌难实现 ✅JWT exp自动 ❌无控制机制 ✅分布式 ✅轻便

Smart‑SSO 在 OAuth2 标准实现 + 运维轻量 + 按钮粒度权限 + 分布式 + 自动续签 等维度综合表现突出,适合中小团队快速建设高可用 SSO 中间件平台。

常见实施步骤与代码示例

1. 快速启动服务端

@SpringBootApplication
public class SmartSsoServerApplication {
 public static void main(String[] args) {
   SpringApplication.run(SmartSsoServerApplication.class, args);
 }
}

application.yml 中配置数据库、Redis、端口等:

server:
 port: 8080
spring:
 datasource:
   url: jdbc:mysql://localhost:3306/smart_sso
   username: root
   password: root
 redis:
   host: localhost
   port: 6379

2. 客户端接入示例

添加 starter 依赖:

<dependency>
 <groupId>com.smart.sso</groupId>
 <artifactId>smart-sso-starter-client</artifactId>
 <version>最新版</version>
</dependency>

application.yml 配置:

smart:
 sso:
   server-url: http://sso.example.com:8080
   client-id: demo-client
   client-secret: xxxxx
   logout-url: http://demo-app/logout/callback

3. 功能测试流程

graph TB
 User --> App[客户端]
 App --> SSO[认证中心]
 SSO --> App
 App --> SSO{accessToken expires?}
 SSO --> App via refreshToken

项目总结

  • 轻量化、标准实现,SpringBoot + OAuth2 + RBAC。
  • 🛡️ 安全性格外突出:单点退出、踢人下线能力。
  • 🔄 使用体验丝滑:自动续签完美平滑过期交互。
  • 🌍 架构应用广泛:跨域、前后端分离、分布式集群。
  • 🎯 精细权限控制:按钮级权限保障接口安全。

Smart‑SSO 几乎集齐 SSO 中核心高频需求,是中小团队构建认证中台的得力助手。

同类项目简介

  • Keycloak:JBoss 提供的全功能身份认证中台,支持 OAuth2、OpenID、LDAP、Kerberos、多组织,但体积较大、上手略复杂。
  • CAS:老牌 SSO 工具,支持单点退出,但非 OAuth2 标准,按钮权限需开发者自拓展。
  • 自定义 JWT+OAuth:实现灵活,但是需自行补足踢下线和单退出机制,开发成本高且易出错。

项目地址

https://github.com/a466350665/smart-sso

相关文章
|
7月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
597 2
|
11月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1083 1
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
676 70
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
516 4
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
833 1
|
9月前
|
消息中间件 NoSQL Java
SpringBoot框架常见的starter你都用过哪些 ?
本节介绍常见的Spring Boot Starter,分为官方(如Web、AOP、Redis等)与第三方(如MyBatis、MyBatis Plus)两类,用于快速集成Web开发、数据库、消息队列等功能。
499 0
|
11月前
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
993 4
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
1465 160
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
273 0
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
2190 127