单点登录实现的几种方式及原理【单点登录】

article/2025/10/4 19:30:58

文章目录

  • 一、什么是单点登录
  • 二、单点登录原理
  • 三、单点登录实现方式
    • 1.基于Cookie+Redis的单点登录
    • 2.分布式session方式实现单点登录
    • 3.token验证
    • 4.session广播
    • 5.CAS 中央认证服务

一、什么是单点登录

单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统。简而言之,多个系统,统一登陆。

为什么需要做单点登录系统呢?在一些互联网公司中,公司旗下可能会有多个子系统,每个登陆实现统一管理,多个账户信息统一管理 SSO单点登陆认证授权系统。比如阿里系的淘宝和天猫,显而易见这是两个系统,但是在使用过程中,只要你登录了淘宝,同时也意味着登录了天猫,如果每个子系统都需要登录认证,用户早就疯了,所以我们要解决的问题就是,用户只需要登录一次就可以访问所有相互信任的应用系统。

二、单点登录原理

sso需要一个独立的认证中心,所有子系统都通过认证中心的登录入口进行登录,登录时带上自己的地址,子系统只接受认证中心的授权,授权通过令牌(token)实现,sso认证中心验证用户的用户名密码正确,创建全局会话和token,token作为参数发送给各个子系统,子系统拿到token,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。
在这里插入图片描述

三、单点登录实现方式

单点登录的实现方案,一般就包含:Cookies,Session同步,分布式Session,目前的网站采用比较多的方式是token令牌和分布式Session的方式。

1.基于Cookie+Redis的单点登录

最简单的单点登录实现方式,用cookie作为媒介存放用户凭证。 用户登录系统之后,会返回一个加密的cookie,当用户访问子应用的时候会带上这个cookie,授权以解密cookie并进行校验,校验通过后即可登录当前用户。

redis:在key:生成唯一随机值(ip、用户id等等),在value:用户数据

cookie:把redis里面生成key值放到cookie里面
在这里插入图片描述
下面对上图简要描述

  1. 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  2. sso认证中心发现用户未登录,将用户引导至登录页面
  3. 用户输入用户名密码提交登录申请
  4. sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
  5. sso认证中心带着令牌跳转会最初的请求地址(系统1)
  6. 系统1拿到令牌,去sso认证中心校验令牌是否有效
  7. sso认证中心校验令牌,返回有效,注册系统1
  8. 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
  9. 用户访问系统2的受保护资源
  10. 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  11. sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
  12. 系统2拿到令牌,去sso认证中心校验令牌是否有效
  13. sso认证中心校验令牌,返回有效,注册系统2
  14. 系统2使用该令牌创建与用户的局部会话,返回受保护资源

通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露,攻击者可以通过伪造Cookie伪造成特定用户身份。 对于问题二更是硬伤,所以才有了以下的分布式session方案。

2.分布式session方式实现单点登录

流程运行:

(1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;

(2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;

(3) 一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;

(4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;

结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。

3.token验证

  1. 在项目某个模块进行登录,登录之后,按照jwt规则生成字待串,把登录之后用户包含到生成字符串里面,把字符串返回

(1)可以把宁符串通过cookie返回
(2)把字符串通过地址栏返回

  1. 前端收到token之后将token存储在自己的请求头之中或者url后面,这样每次请求都可以带着token请求。

  2. 再去访问项目其他模块,获取地址栏或者请求头里面的token,根据宇符串获职用户信息。

  3. 同时为了设置失效时间,可以将token放在redis中,设置失效时间,判断过期。

4.session广播

方法太老使用麻烦,了解即可。

5.CAS 中央认证服务

https://blog.csdn.net/wang121213145/article/details/124822899?spm=1001.2014.3001.5501


http://chatgpt.dhexx.cn/article/5RW6ZlwJ.shtml

相关文章

什么是单点登录?怎么样实现单点登录

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如…

什么是单点登录

一、什么是单点登录? 单点登录的英文名叫做:Single Sign On(简称SSO)。 在初学/以前的时候,一般我们就单系统,所有的功能都在同一个系统上。 后来,我们为了合理利用资源和降低耦合性&#xff…

什么是单点登录?单点登录的三种实现方式

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如…

什么是单点登录(SSO)?单点登录(SSO)到底什么意思?【附逻辑Demo实例】

在程序开发中,特别是网站类开发,会接触到单点登录(SSO),什么是单点登录?,单点登录(SSO)有什么用?下面软币网小编来来介绍一下: 一、什么是单点登录? 单点登录的英文名叫做&#xf…

分布式系统服务单点问题的探讨

分布式系统服务单点问题的探讨 无状态服务的单点问题有状态服务的单点问题 在分布式系统中,单点问题是一个比较常见的问题,对于单点问题可以分为有状态服务的单点问题和无状态服务的单点问题。 无状态服务的单点问题 对于无状态的服务,单点问…

08-微服务版单点登陆系统(SSO)实践

文章目录 单点登陆系统简介背景分析单点登陆系统概述单点登陆系统解决方案设计 单点登陆系统初步设计服务设计工程结构设计 SSO父工程创建及初始化创建父工程父工程pom文件初始配置 系统基础服务工程设计及实现业务描述表结构设计工程数据初始化创建系统服务工程并初始化Pojo对…

IDEA同时打开多个项目之解决方法

对于我们开发人员来说,有时想在一个窗口中打开多个项目,这时打开新项目时只有两个选项: 覆盖本窗口项目/在新窗口打开 解决方法: 1、点击左上角 File--->Project Structure: 2、然后选择Modules这一栏&#xff0c…

idea一个工作空间打开多个项目

很多时候,多个项目之间并不是parent和module的关系,如果不是parent和module的关系,idea一个工作空间只能打开一个项目,这样的话,如果有多个项目,来回切换视图让人烦不胜烦。下面介绍个在idea一个工作空间打…

Idea打开多个项目文件时,不自动识别maven项目

问题描述 idea打开多个项目文件(直接打开的多个项目的文件夹),却没有识别出maven项目。网上查阅,解决方案为: 选中项目的pom.xml文件,右键-" add as maven project"。 但由于项目过多,不方便一个…

idea在一个窗口打开多个项目

1、.将两个项目或多个项目放在同一个文件夹下(等同于eclipse中将多个项目放在工作空间workspace下),lz在D盘下创建了ideaCloudProject文件夹,并在该文件夹下创建了一个cloud项目和一个vue项目,如下图: 2、用idea打开该…

一个IDEA界面如何同时打开多个项目

第一步:先导入其中一个工程 第二步:点击File->Project Structure 第三步:导入模块 最后点击Apply即可完成一个IDEA界面同时打开多个项目的需求。

怎么在IDEA的一个窗口中打开多个项目

之前一直使用的是sts,最近比较有空,学习一下idea的使用。 习惯了eclipse,myeclipse,sts等工具,想在一个窗口管理多个项目,只用import就可以了。但今天使用Intellij IDEA时,新建了一个工程,然后我又想从github上把我以前…

IDEA中如何在一个窗口中打开多个项目

idea在一个窗口如何打开多个项目 在使用Spring进行微服务开发时,需要同时打开很多个项目,但是如果每一个项目都单独一个窗口的话,切换就很麻烦,最方便的就是在IDEA一个窗口中管理多个项目。 在IDEA之中,它的一个项目就…

idea同时打开多个项目

想在idea中同时打开多个项目,如下图 打开项目后一般无法识别多个文件,可以按照下面的步骤操作 查看项目中maven插件是否打开 查看maven是否配置 查看右侧是否有maven选项,如果没有就先添加maven选项,添加方案步骤提供下面三种方…

使用IDEA打开eclipse项目

文章目录 点击左上角的File→New→Project from Existing Sources。 选择到要打开的项目路劲,选择好后点击OK 先勾选 Import project from external model 后选择Eclipse后点击Next。 无需设置,直接点击Next。 继续点击Next。 继续Next。 选择运行项目的…

idea关闭多个项目合并在tab栏显示

macos bigsur使用新版idea 2021.2 打开多个项目合并到tab栏: 对于屏幕比较小多了一行感觉比较别扭,以及全屏下暂时没适应……好几次都感觉找不到桌面…… 关闭:这个关闭是mac级别的关闭,并不是idea的setting macos - 系统偏好 …

IDEA设置多窗口打开项目

问题: 解决IDEA打开项目总是在当前窗口下,无法同事打开两个窗口的问题。【可能是我自己默认配置的问题】 解决: 菜单栏File,进入Setting栏 如上图所示,配置即可~~ 转载于:https://www.cnblogs.com/hyc-ana/p/9187153.h…

【Mac】在Idea中打开两个项目在同一个窗口

前置条件: 打开两个项目在不同窗口 步骤: 1.选择一个窗口上的window(窗口)选项。 2.选择Merge All Project Windows(合并所有项目窗口) 效果: 注意事项: 一定要打开多个项目&am…

MAC设置idea多个项目合并在tab栏显示

这个是mac级别的设置,并不是idea的设置。系统偏好 - 通用 - 始终 : 另外IDEA打开新项目时应选择new window

idea在一个窗口打开一个文件夹里的多个项目

使用场景:Spring-cloud框架下的项目一般都有多个子项目,就像我们项目由6个子项目,每个子项目单独更新很麻烦,还有相互之间的依赖,所以就把所有的子项目都放到一个文件夹下,只要更新所有的子项目都会更新&am…