Skip to content

SSO单点登录

xinwu-yang edited this page Feb 28, 2023 · 1 revision

前言

魔方采用的是 Sa-Token 权限认证框架,因此SSO方案也是基于此!

凡是稍微上点规模的系统,统一认证中心都是绕不过去的槛。而单点登录——便是我们搭建统一认证中心的关键。

什么是单点登录?解决什么问题?

举个场景,假设我们的系统被切割为N个部分:商城、论坛、直播、社交…… 如果用户每访问一个模块都要登录一次,那么用户将会疯掉, 为了优化用户体验,我们急需一套机制将这N个系统的认证授权互通共享,让用户在一个系统登录之后,便可以畅通无阻的访问其它所有系统。

单点登录——就是为了解决这个问题而生!

简而言之,单点登录可以做到:在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。

架构选型

Sa-Token-SSO 由简入难划分为三种模式,解决不同架构下的 SSO 接入问题:

系统架构 采用模式
前端同域 + 后端同 Redis 共享 Cookie 同步会话
前端不同域 + 后端同 Redis URL重定向传播会话
前端不同域 + 后端不同 Redis Http请求获取会话
  1. 前端同域:就是指多个系统可以部署在同一个主域名之下,比如:c1.domain.com、c2.domain.com、c3.domain.com。

  2. 后端同Redis:就是指多个系统可以连接同一个Redis。PS:这里并不需要把所有项目的数据都放在同一个Redis中,Sa-Token提供了 [权限缓存与业务缓存分离] 的解决方案,详情戳:Alone独立Redis插件。

  3. 如果既无法做到前端同域,也无法做到后端同Redis,那么只能走模式三,Http请求获取会话(Sa-Token对SSO提供了完整的封装,你只需要按照示例从文档上复制几段代码便可以轻松集成)。

Sa-Token-SSO 特性

  1. API 简单易用,文档介绍详细,且提供直接可用的集成示例。

  2. 支持三种模式,不论是否跨域、是否共享Redis、是否前后端分离,都可以完美解决。

  3. 安全性高:内置域名校验、Ticket校验、秘钥校验等,杜绝Ticket劫持、Token窃取等常见攻击手段(文档讲述攻击原理和防御手段)。

  4. 不丢参数:笔者曾试验多个单点登录框架,均有参数丢失的情况,比如重定向之前是:http://a.com?id=1&name=2,登录成功之后就变成了:http://a.com?id=1,Sa-Token-SSO内有专门的算法保证了参数不丢失,登录成功之后原路返回页面。

  5. 无缝集成:由于Sa-Token本身就是一个权限认证框架,因此你可以只用一个框架同时解决权限认证 + 单点登录问题,让你不再到处搜索:xxx单点登录与xxx权限认证如何整合……

  6. 高可定制:Sa-Token-SSO模块对代码架构侵入性极低,结合Sa-Token本身的路由拦截特性,你可以非常轻松的定制化开发。

开发文档

戳这里

示例Demo

戳这里

更新日志

CHANGELOG

开发环境

开发环境安装

Git开发和迭代规范

Git开发和迭代规范

快速开始

3.0.x

2.6.x

代码生成器

如何使用代码生成器

自定义代码生成器模板

开发技巧

登录和凭证配置介绍

如何在代码中获取当前登录对象

字典翻译

菜单路由配置

数据日志如何使用

查询过滤器用法

系统操作日志怎么插入

平台消息推送接口

限制API重复提交

部门父子编码使用方法

系统文件上传

系统编码规则如何使用

系统校验规则如何使用

第三方平台如何调用魔方API

如何切换回Druid数据源

自定义接口拦截器

自定义接口参数Formatter

使用SpringDoc编写API文档

系统权限用法

接口请求权限

页面按钮权限

表格列字段权限

二级部门权限管理

数据权限

表单权限

业务模块

Quartz任务调度

消息中心

第三方登录

阿里云OSS(MinIO)上传管理模块

魔方Plugins

工作流引擎

SQL导出

字符串脱敏

Excel的快速导入导出

文件的上传和下载

加密插件

接入magic-api

新版代码生成器

通用地图服务

高级用法

部门结构变化权限如何控制

如何优雅的拓展用户部门字段

多租户

SSO单点登录

Prometheus

数据库专栏

MySQL5.7+

MySQL分区表

达梦数据库(DM8)

魔方集成达梦数据库

从MySQL迁移到达梦数据库

达梦8与MySQL的主要区别

MyCat分库分表

原则

垂直分片Demo

水平分片Demo

微服务

如何切换微服务

微服务组件

预研Demo示例

预研Demo示例

Clone this wiki locally