基于SpringBoot实现简易的单点登录系统(提供gitee源码)

前言:

最近的工作与学习中接触到需要开发一个单点登录的功能模块,在搜集网上的一些不错的文章写的一份简易的总结,简述了单点登录的实现思路和原理,最后我也提供了一个写的非常简易的单点登录的springboot项目,仅用作学习分享。

目录

一、什么是单点登录(SSO)

二、单点登录的原理

三、单点登录的实现方案

(一)、通过Cookie+Session实现单点登录

(二)、通过Session共享实现单点登录

(三)、通过Token实现单点登录

四、gitee项目简介

(一)、源码地址

(二)、项目简介

(三)、项目整体结构

(四)、操作过程


一、什么是单点登录(SSO)

单点登录的英文名全称叫做:Single Sign On,简称SSO,是指在同一个账号平台下的多个子系统中,用户只需要登录一次,就可以访问其余所有相互的信任的系统,比如支付宝旗下有天猫和淘宝,当我登陆了淘宝以后,天猫也会同步进行登录,就不需要们再一个个去进行登录操作了,简而言之便是,多个互相信任的子系统同步登陆。

二、单点登录的原理

SSO有单独的一个认证中心,所有的子系统都是通过这个认证中心的登录入口进行登录的,登录的时候会附带自己的URL,首先SSO认证中心会验证客户的账号和密码是否正确,之后会创建全局绘画以及Token,Token会发放给每个子系统,当子系统拿到了Token,便有了授权,就可以创建客户与该子系统的局部会话。

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第1张图片

三、单点登录的实现方案

这里我主要归纳了三种方案进行了大概的简述。

(一)、通过Cookie+Session实现单点登录

使用Cookie作为存放客户的凭据,当客户登录成功后,SSO会返回一个加密的Cookie,当用户访问子系统时候会携带上这个Cookie进行访问受保护的资源,当客户在访问子系统时候,先拿到对于子系统的Cookie,再从Redis中查询Cookie是否存在,不存在则重定向到登录页面,存在则正常执行程序,实现单点登录。

Redis是一个键值对(Key,Value)存放客户信息,Key:ID,Value:用户数据,例如姓名,密码和身份证等等

Cookie:把Redis生成的Key存入Cookie当中

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第2张图片

步骤概述:

1、客户访问系统1中受保护的资源,系统1发现客户还未登录,跳转到SSO认证中心,并将自己的地址作为参数

2、SSO认证中心发现客户还没登录,将客户引导至登录界面

3、客户输入账号和密码申请登录

4、SSO认证中心校验用户信息,比对通过则与客户创建与SSO认证中心之间的会话,称之为全局会话,同时创建授权令牌。

5、SSO认证中心带着令牌跳转回系统1的请求地址

6、系统1拿到令牌,去SSO认证中心校验令牌是否有效

7、SSO认证中心校验令牌,结果有效,则注册系统1

8、系统1使用该令牌和客户创建局部绘画,返回受保护的资源

注意如下6点:

1、客户与SSO认证中心建立的会话称为全局会话

2、客户与子系统创建的会话称为局部会话

3、局部会话存在,则全局会话一定存在

4、全局会话存在,则局部会话不一定存在

5、全局会话销毁,则局部会话一定销毁

6、相同的域的Cookie可以进行共享,例如ww.abc.com和www.efd.com可以访问xxx.com的Cookie,但ww.abc.com和www.efd.com是不能互相访问的

(二)、通过Session共享实现单点登录

1、客户第一次登录成功时候,将会话信息(用户ID和数据)写入共享Session

2、客户再次登录时,获取共享Session,判断是否有会话信息,如果没用则跳转到登录页面

3、存入会话,设置会话持久时间,超过固定时间后自动超时

(三)、通过Token实现单点登录

1、在通过SSO认证后,按照指定规则生成字符串,把登录之后的用户信息加密到字符串当中,把此字符串进行返回,可以把字符串通过Cookie返回也可以拼接在URL地址上进行返回

2、再次访问其他子系统,在地址栏附带生成的加密字符串,子系统获取加密的字符串,根据加密的字符串获取用户信息,如果没问题就可以访问受保护资源

四、gitee项目简介

(一)、源码地址

https://gitee.com/huang-tuantuan/sso

(二)、项目简介

这里我主要通过Token拼接在URL上面实现的单点登录,整体项目写的非常简易,仅用于提供一个学习思路,对单点登录有个基础的了解。

(三)、项目整体结构

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第3张图片

index模块:首页

ekp模块:ekp子系统

oa:oa子系统 

login模块:sso登录认证

(四)、操作过程

1、首页基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第4张图片

2、点击立即登录,输入账号和密码,点击登录

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第5张图片

3、 登录成功后会重定向到首页,token拼接在了URL地址上基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第6张图片

4、尝试访问oa子系统和访问ekp子系统,发现已经自动登录

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第7张图片

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第8张图片

5、再次回到首页,点击退出登录后

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第9张图片

6、再次尝试访问oa子系统和ekp子系统 ,发现都已经自动退出登录

 基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第10张图片

基于SpringBoot实现简易的单点登录系统(提供gitee源码)_第11张图片

        以上就是我对单点登录的一些理解与总结! 

你可能感兴趣的:(SpringBoot,spring,boot,git,java)