当前位置: 首页 > news >正文

Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录

🚀 Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录

在现代分布式系统架构中,我们经常会遇到这样的痛点:公司内部有商城、论坛、后台管理等多个子系统。用户在 A 系统登了一遍,去 B 系统还得再输一次密码,体验极差。

单点登录(Single Sign-On, SSO)就是为了解决这个问题而生的——用户只需在一个地方登录,即可畅通无阻地访问所有互信的系统

而在 Java 生态中,Sa-Token 凭借其极其简洁优雅的 API 设计,成为了实现 SSO 的热门选择。今天,我们就用大白话来彻底搞懂 Sa-Token 提供的三种 SSO 模式,帮你快速选型!

🏗️ 核心架构原则

在深入模式之前,我们需要明确一个整体架构原则:集中式认证 + 分布式会话管理。简单来说,就是有一个统一的“认证中心”负责验明正身,而各个子系统通过共享或查询的方式来确认用户的登录状态。

🍪 模式一:共享 Cookie(同域 + 同 Redis)

【大白话比喻】:办一张“全园区通用”的门禁卡。

  • 适用场景:你的几个子系统都在同一个主域名下(例如oa.example.comcrm.example.com),并且后台连接的是同一个 Redis 数据库。
  • 工作原理:因为大家属于同一个“家族”(主域名相同),浏览器允许它们共享 Cookie。你在认证中心登录后,服务器把登录凭证(Token)写进 Cookie,并把这个 Cookie 的作用域设为整个园区(.example.com)。当你去访问其他子系统时,浏览器会自动带上这张通用的门禁卡,子系统一看是自家兄弟发的卡,直接放行。
  • 优缺点:实现最简单,用户完全无感,体验最丝滑;但限制最多,必须是同一家族(同主域名)的系统才能用。
🎟️ 模式二:URL 重定向 + Ticket(跨域 + 同 Redis)

【大白话比喻】:去“总服务台”领一张一次性的“入园门票”。

  • 适用场景:子系统分散在不同的域名(比如www.aaa.comwww.bbb.com),但后台依然连接着同一个 Redis。这是目前前后端分离及微服务架构中最主流的模式。
  • 工作原理:因为域名不同,Cookie 没法直接共享了。这时候需要一个“总服务台”(SSO 认证中心)。
    1. 你去 B 系统,B 说“我不认识你”,把你踢回总服务台。
    2. 总服务台发现你之前在 A 系统已经登过了,于是给你发一张带有时效性的“临时门票”(Ticket),把你送回 B 系统。
    3. B 系统拿着这张门票去 Redis(总后台)里核对:“这张票是真的吗?”核对无误后,B 系统才让你登录。
  • 优缺点:既支持跨域名,安全性又高(Ticket 是一次性的,防劫持),兼顾性能;比模式一稍微复杂一点,中间会有页面的跳转(重定向)。
📞 模式三:HTTP 请求主动查询(跨域 + 跨 Redis)

【大白话比喻】:每次办事前,先打个电话给总部“人工核实”身份。

  • 适用场景:子系统不仅域名不同,连后台的 Redis 数据库也是各自独立的(比如 Java 写的 A 系统和 PHP 写的 B 系统,或者完全跨公司的合作系统)。
  • 工作原理:既然内存(Redis)都不互通,那就只能靠“打电话”(HTTP 网络请求)来沟通了。
    1. 你在 B 系统登录时,B 系统会直接发起一个 HTTP 请求,远程呼叫 SSO 认证中心:“喂,这个用户现在在你们那登录了吗?”
    2. 认证中心查一下自己的数据库,回复 B 系统:“是的,他登录了,这是他的账号信息。”
    3. B 系统收到回复后,才允许你通过。
  • 优缺点:通用性最强,不管你的系统是用什么语言写的、部署在哪里,只要能联网发 HTTP 请求就能对接;但每次都要跨网络去查询,速度相对较慢,对认证中心的网络压力也最大。
📊 三种模式对比总结

为了更直观地对比,为大家整理了一个简单的决策表格:

模式核心技术适用场景优缺点
模式一共享 Cookie同主域名 + 同 Redis体验最好,但限制多(必须同域)
模式二URL 重定向 + Ticket不同域名 + 同 Redis最推荐,跨域且安全,兼顾性能
模式三HTTP 远程查询不同域名 + 不同 Redis万能兼容,但速度慢,网络开销大

💡 选型建议:

  • 如果你的系统都在同一个主域名下,闭眼选模式一
  • 如果是现代互联网常见的跨域微服务架构(SpringBoot + Vue/React),首选模式二
  • 只有在面对极其复杂的异构系统(不同语言、不同公司、无法共享缓存)时,才考虑使用模式三
http://www.gsyq.cn/news/1362303.html

相关文章:

  • 经典Gilbert算法如何挑战机器学习,绘制量子纠缠地图?
  • SleeperX:革命性macOS智能睡眠管理工具,重新定义你的电源控制体验
  • 大模型也吃“人类话术”这一套?PNAS 新论文给测试人提了个醒
  • OmenSuperHub:惠普OMEN游戏本终极性能控制软件完全指南
  • 保姆级教程:用Python和Keras复现4D-CRNN脑电情绪识别模型(附DEAP/SEED数据集处理全流程)
  • 浏览器扩展开发:打造个性化浏览体验
  • de风——【从零开始学Linu】 - 基础指令详解(二)
  • Git学习(四)
  • 基于计算机视觉与SLAM的无障碍机器人编程教学框架设计与实践
  • FAI-C-ST基准:基于基督教社会训导的AI价值观对齐评估实践
  • 别再死磕理论了!用Neo4j和Python,从零实战构建一个企业关系知识图谱
  • 技术人的持续学习:保持竞争力的完整指南
  • 云原生监控体系建设:打造全方位的可观测性平台
  • IMPROVER系统:AI气象预报统计后处理的工程化实践
  • Pico Neo3 XR开发实战:从黑屏闪退到真机运行的完整链路
  • 【论文复现】基于反步法-神经网络控制器、LOS制导和Lyapunov方法的多艘欠驱动水面船舶协调路径跟踪非线性控制Matlab代码
  • 开源AI编辑器的未来发展趋势
  • 告别GLIBC版本地狱:手把手教你用-L选项搞定交叉编译的库依赖(以ARM开发板为例)
  • OpenSSH ssh-agent动态库加载漏洞CVE-2023-38408深度解析
  • Zookeeper集群启动失败?从myid配置到防火墙,保姆级排错指南来了
  • 无框架手写实现Function Calling:原理拆解+纯Python手写实现
  • Claude API文档版本管理生死线:v2.1→v3.0迁移实录,12个breaking change的文档同步策略
  • Vscode配置C/C++环境“无法使用 compilerPath 解析配置”及引用路径问题
  • 2026郑州柔性腻子优质品牌推荐指南:河南金刚沙腻子、河南防水抗裂砂浆、河南防水砂浆、郑州儿童房腻子、郑州内墙漆腻子选择指南 - 优质品牌商家
  • Arm SVE架构核心技术解析与开发实践
  • Ubuntu 20.04 安装 ROS Noetic 保姆级避坑指南(附国内源配置与rosdep update终极解决方案)
  • 觅健AI病程管理系统入选2026中国医疗健康产业最具创新力产品技术50强
  • 用Python处理DREAMER脑电数据集:从.mat文件到.npy文件的完整实战教程
  • Vibe Coding 适合什么场景?Trae 精准适配全场景首选
  • 工业视觉异常检测:PatchCore与EfficientAD实战