单点登录(SSO)实现详解!!!

前端实现单点登录(SSO) 1、一个系统登录流程:用户进入系统——未登录——跳转登录界面——用户名和密码发送——服务器端验证后,设置一个cookie发送到浏览器,设置一个session存放在服务器——用户再次请求(带上cookie)——服务器验证cookie和session匹配后,就可以进行业务了。2、多个系统登录:如果一个大公司有很多系统,a.seafile.com, b.seafile.com,c.seafile.com。这些系统都需要登录,如果用户在不同系统间登录需要多次输入密码,用户体验很不好。 阅读详情

点击下方“前端技术编程”,选择“设为星标”

第一时间关注技术干货!

单点登录是什么?你是怎么理解的?单点登录是如何实现的

普通登录

提到单点登录,首先可以想到传统登录,通过登录页面根据用户名查询用户信息,判断密码是否正确,正确则将用户信息写到session,访问的时候通过从session中获取用户信息,判断是否已登录,登录则允许访问。

普通登录的缺点

由于session不能共享,服务越来越多,并且还服务还搭建集群,导致每访问另外一个服务都需要重新登录。

单点登录

单点登录有个简称是sso,它是一个功能可以控制多个有联系的系统操作,简单地理解为通过单点登录可以让用户只需要登录一次软件或者系统,那么同系统下的平台都可以免去再次注册、验证、访问权限的麻烦程序,通俗易懂的理解为一次性登录也可以一次性下线。

前端需要知道的单点登录概述:

1、一个系统登录流程:用户进入系统——未登录——跳转登录界面——用户名和密码发送——服务器端验证后,设置一个cookie发送到浏览器,设置一个session存放在服务器——用户再次请求(带上cookie)——服务器验证cookie和session匹配后,就可以进行业务了。

2、多个系统登录:如果一个大公司有很多系统,a.seafile.com, b.seafile.com,c.seafile.com。这些系统都需要登录,如果用户在不同系统间登录需要多次输入密码,用户体验很不好。所以使用 SSO (single sign on) 单点登录实现。

3、相同域名,不同子域名下的单点登录:在浏览器端,根据同源策略,不同子域名的cookie不能共享。所以设置SSO的域名为根域名。SSO登录验证后,子域名可以访问根域名的 cookie,即可完成校验。在服务器端,可以设置多个子域名session共享(Spring-session)

4、不同域名下的单点登录:CAS流程:用户登录子系统时未登录,跳转到 SSO 登录界面,成功登录后,SSO 生成一个 ST (service ticket )。用户登录不同的域名时,都会跳转到 SSO,然后 SSO 带着 ST 返回到不同的子域名,子域名中发出请求验证 ST 的正确性(防止篡改请求)。验证通过后即可完成不同的业务。

单点登录需求

在项目初期,公司中使用的系统很少,通常一个或者两个,每个系统都有自己的登录系统,用户用自己的账号登录,很方便。

但随着公司的不断发展,用到的系统随之增多,用户在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于用户来说,是很不好的体验。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。

单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

7066f7854ff8cefaeb552e1666e48a99.jpeg 如图所示,图中有4个系统,分别是Application1、Application2、Application3、和SSO。Application1、Application2、Application3没有登录模块,而SSO只有登录模块,没有其他的业务模块,当Application1、Application2、Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也就随之登录了。这完全符合我们对单点登录(SSO)的定义。

SSO 机制实现流程

用户首次访问时,需要在认证中心登录:

b334c4c89e70d8cd54d4ad7b51fe0c09.jpeg
  1. 用户访问网站 a.com 下的 pageA 页面。

  2. 由于没有登录,则会重定向到认证中心,并带上回调地址 (http://www.sso.com?return_uri=a.com/pageA%EF%BC%8C%E4%BB%A5%E4%BE%BF%E7%99%BB%E5%BD%95%E5%90%8E%E7%9B%B4%E6%8E%A5%E8%BF%9B%E5%85%A5%E5%AF%B9%E5%BA%94%E9%A1%B5%E9%9D%A2%E3%80%82 )

  3. 用户在认证中心输入账号密码,提交登录。

  4. 认证中心验证账号密码有效,然后重定向 a.com?ticket=123 带上授权码 ticket,并将认证中心 sso.com 的登录态写入 Cookie。

  5. 在 a.com 服务器中,拿着 ticket 向认证中心确认,授权码 ticket 真实有效。

  6. 验证成功后,服务器将登录信息写入 Cookie(此时客户端有 2 个 Cookie 分别存有 a.com 和 sso.com 的登录台)。

认证中心登录完成之后,继续访问 a.com 下的其他页面:

4d4406a529fb1433a896f7080a893b14.jpeg

这个时候,由于 a.com 存在已登录的 Cookie 信息,所以服务器端直接认证成功。

如果认证中心登录完成之后,访问 b.com 下的页面:
b7782b5966be26000a588a9276588121.jpeg

这个时候,由于认证中心存在之前登录过的 Cookie,所以也不用再次输入账号密码,直接返回第 4 步,下发 ticket 给 b.com 即可。

SSO 机制实现方式

单点登录主要有三种实现方式:

  1. 父域 Cookie

  2. 认证中心

  3. LocalStorage 跨域

一般情况下,用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,但是由于不同的应用系统有着不同的域名,尽管 Session 共享了,但是由于 SessionId 是往往保存在浏览器 Cookie 中的,因此存在作用域的限制,无法跨域名传递,也就是说当用户在 a.com 中登录后,Session Id 仅在浏览器访问 a.com 时才会自动在请求头中携带,而当浏览器访问 b.com 时,Session Id 是不会被带过去的。实现单点登录的关键在于,如何让 Session Id(或 Token)在多个域中共享。

1. 父域 Cookie

Cookie 的作用域由 domain 属性和 path 属性共同决定。domain 属性的有效值为当前域或其父域的域名/IP地址,在 Tomcat 中,domain 属性默认为当前域的域名/IP地址。path 属性的有效值是以“/”开头的路径,在 Tomcat 中,path 属性默认为当前 Web 应用的上下文路径。

如果将 Cookie 的 domain 属性设置为当前域的父域,那么就认为它是父域 Cookie。Cookie 有一个特点,即父域中的 Cookie 被子域所共享,也就是说,子域会自动继承父域中的 Cookie。

利用 Cookie 的这个特点,可以将 Session Id(或 Token)保存到父域中就可以了。我们只需要将 Cookie 的 domain 属性设置为父域的域名(主域名),同时将 Cookie 的 path 属性设置为根路径,这样所有的子域应用就都可以访问到这个 Cookie 了。不过这要求应用系统的域名需建立在一个共同的主域名之下,如 tieba.baidu.com 和 map.baidu.com,它们都建立在 baidu.com 这个主域名之下,那么它们就可以通过这种方式来实现单点登录。

总结:此种实现方式比较简单,但不支持跨主域名。

2. 认证中心

我们可以部署一个认证中心,认证中心就是一个专门负责处理登录请求的独立的 Web 服务。

用户统一在认证中心进行登录,登录成功后,认证中心记录用户的登录状态,并将 Token 写入 Cookie。(注意这个 Cookie 是认证中心的,应用系统是访问不到的)

应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统中尚未登录,那么就将页面跳转至认证中心进行登录。由于这个操作会将认证中心的 Cookie 自动带过去,因此,认证中心能够根据 Cookie 知道用户是否已经登录过了。如果认证中心发现用户尚未登录,则返回登录页面,等待用户登录,如果发现用户已经登录过了,就不会让用户再次登录了,而是会跳转回目标 URL ,并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统。

应用系统拿到 Token 之后,还需要向认证中心确认下 Token 的合法性,防止用户伪造。确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie,然后给本次访问放行。(这个 Cookie 是当前应用系统的,其他应用系统是访问不到的)当用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录,于是就不会有认证中心什么事了。

总结:此种实现方式相对复杂,支持跨域,扩展性好,是单点登录的标准做法。

3. LocalStorage 跨域

单点登录的关键在于,如何让 Session Id(或 Token)在多个域中共享。但是 Cookie 是不支持跨主域名的,而且浏览器对 Cookie 的跨域限制越来越严格。

在前后端分离的情况下,完全可以不使用 Cookie,我们可以选择将 Session Id (或 Token )保存到浏览器的 LocalStorage 中,让前端在每次向后端发送请求时,主动将 LocalStorage 的数据传递给服务端。这些都是由前端来控制的,后端需要做的仅仅是在用户登录成功后,将 Session Id (或 Token )放在响应体中传递给前端。

在这样的场景下,单点登录完全可以在前端实现。前端拿到 Session Id (或 Token )后,除了将它写入自己的 LocalStorage 中之外,还可以通过特殊手段将它写入多个其他域下的 LocalStorage 中。

总结:此种实现方式完全由前端控制,几乎不需要后端参与,同样支持跨域。

SSO 单点登录退出

目前我们已经完成了单点登录,在同一套认证中心的管理下,多个产品可以共享登录态。现在我们需要考虑退出了,即:在一个产品中退出了登录,怎么让其他的产品也都退出登录?

原理其实不难,可以在每一个产品在向认证中心验证 ticket(token) 时,其实可以顺带将自己的退出登录 api 发送到认证中心。

当某个产品 c.com 退出登录时:

清空 c.com 中的登录态 Cookie。请求认证中心 sso.com 中的退出 api。认证中心遍历下发过 ticket(token) 的所有产品,并调用对应的退出 api,完成退出。

作者:爱吃橘子的程序猿  https://juejin.cn/post/7282692430117748755

— 完 —

关注公众号后,回复下面关键词获取
回复 加群,加入前端程序员技术交流群
回复 面试,获取最新大厂面试资料
回复 简历,获取 3200 套 简历模板
回复 TypeScript,获取 TypeScript 精讲课程
回复 uniapp,获取 uniapp 精讲课程
回复 Node,获取 Nodejs+koa2 实战教程
回复 架构师,获取 架构师学习资源教程
更多教程资源应用尽有,欢迎 关注获取

   “分享、点赞、在看” 支持一波👍

单点登录的几种方案 单点登录单点登录存在原因方案一方案二:session同步方案三:第三方存储件存储session方案四:对接第三方系统的单点登录 视频讲解链接 单点登录存在原因 分布式微服务成为主流的情况下,需要解决只能在单个用户模块存储session的问题,其他模块需要能够同样取到用户的信息,避免用户反复登录。 方案一 Nginx代理,对IP进行hash,该IP生成的session存储在某一台服务器中 方案问题: 单点故障:某台服务器宕机,该服务器存储的所有session丢失,违背高可用。 所有服务器都具备全量模块, 阅读详情

相关推荐

SpringBoot实现单点登录(SSO)的4种方案

从简单的基于Cookie-Session的方案,到复杂的OAuth 2.0/OIDC实现,SSO方案的选择应该基于业务需求、安全要求、用户体验目标和技术约束进行综合考量。

风象南的专栏 1441

单点登录原理及实现方式

单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统。简而言之,多个系统,统一登陆。 为什么需要做单点登录系统呢?在一些互联网公司中,公司旗下可能会有多个子系统,每个登陆实现统一管理,多个账户信息统一管理 SSO单点登陆认证授权系统。

qq_41595452的博客 6万+

Java SSO单点登录详解

单点登录(Single Sign-On,简称SSO)是一种身份认证机制,允许用户在一个系统中登录后,即可访问多个相互信任的应用系统,而无需在每个系统中重新登录。这不仅提高了用户体验,还简化了管理和维护的复杂性。

C_V_Better的博客 1497

【架构设计】单点登录实现技术方案

单点登录(Single Sign-On,简称SSO)是一种身份认证的解决方案,它允许用户只需一次登录即可访问多个应用程序或系统。在一个典型的SSO系统中,用户只需通过一次身份认证,就可以获得访问多个应用程序的授权,而不需要在每个应用程序中单独进行身份验证。

颜淡慕潇 1万+

单点登录SSO的实现原理与方案详解

为什么需要单点登录 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。 单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝、天猫等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。 所以,单点登录要解决的就是,用户只需要登录一次就可以访问所有相互信任的应用.

mikechen的互联网架构 3717

Spring Security单点登录(SSO)实现详解

在现代的分布式系统中,尤其是微服务架构下,用户常常需要在多个应用之间进行访问,而传统的认证和授权方式往往会带来较大的用户体验上的负担。单点登录(Single Sign-On,简称SSO)技术应运而生,允许用户在一次登录后,便能访问多个系统,避免频繁登录。 Spring Security是一个广泛使用的安全框架,它提供了强大的认证和授权功能,可以帮助开发者实现单点登录(SSO)机制。本文将深入探讨如何使用Spring Security实现SSO,详细讲解其核心概念、工作原理、实现步骤以及在实际项目中的应用。

fudaihb的博客 1601

单点登录(SSO)详解

在分布式项目架构中,为了提高用户体验性,用户只需要认证一次便可以在多个拥有访问权限的系统中访问,这个功能叫做单点登录(SSO)。

weixin_58403235的博客 2万+

Mongodb操作与Java(四)MongoTemplate的使用

MongoTemplate的使用

A乐神的博客 3437

单点登录(SSO)实现详解

1、一个系统登录流程:用户进入系统——未登录——跳转登录界面——用户名和密码发送——服务器端验证后,设置一个cookie发送到浏览器,设置一个session存放在服务器——用户再次请求(带上cookie)——服务器验证cookie和session匹配后,就可以进行业务了。2、多个系统登录:如果一个大公司有很多系统,a.seafile.com, b.seafile.com,c.seafile.com。这些系统都需要登录,如果用户在不同系统间登录需要多次输入密码,用户体验很不好。

qq_35159705的博客 4570

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

VsCode安装和配置c/c++环境(超完整,小白专用)

1. vsCode配置C/C++环境 1. vsCode下载和安装 1. 下载Microsoft vsCode [vsCode在这里插入图片描述官网下载: https://code.visualstudio.com/ 2. 安装vsCode 3. 下载中文插件 我这边已经下载过,刚卸载但是没有重启编译器,所以界面显示了中文 2. MinGW编译器下载和配置 1. 下载MinGW 在线安装——下载MinGW-W64-install.exe(速度慢) 下载压缩包——×86_64-posix-

黄化的多多 60万+

SSO单点登录:全面详解与实现指南

1、定义单点登录(Single Sign - On,简称 SSO)是一种身份验证机制,它允许用户使用单一的凭据(如用户名和密码)访问多个相互信任的应用系统。在这种模式下,用户只需登录一次,就可以在不同的应用之间无缝切换,而无需为每个应用单独进行登录操作。2、优势用户体验提升:用户无需记住多个账号和密码,减少了登录操作的繁琐性,提高了用户体验。管理效率提高:对于企业来说,管理用户账号和权限变得更加简单,只需要在单点登录系统中进行统一的用户管理和认证授权。安全性增强。

Yaml4的博客 5512

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 309

单点登录sso原理及代码实现

什么是单点登录 一个账户在多个系统上实现单一用户的登录 为什么用单点登录 单点登录可以做到在不记录用户密码的情况下,实现不同系统之间的资源共享,自动登录不安全,单点登录,一处登录,处处都可用,不用做多余的登录操作 引用一个很经典的案例 比如现在有OA系统、门户系统、人力资源管理系统、档案管理系统、生产管理系统、xx系统等,这么多个系统在一个公司里面,如果一个用户需要使用这么多个系统,那每天都要登录...

IT界的一只菜鸟 6117

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

• 部署:CI/CD 双流水线,前端 push → GitHub Actions → Cloudflare Pages;• 后端:分层结构 routers → services → repositories → models,单测覆盖率 90 %。• 接口缓存:Redis + FastAPI Depends 实现接口级缓存,读 QPS 提升至 5 k。• 前端:BFF 由 React Query 代理,统一缓存、重试、分页。GET /items/{id} 详情。,前端同学无需等 Mock 即可联调。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1493

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1806

SSO单点登录流程详解

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

码农札记 1万+

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5573

单点登录SSO的实现方式

这个文章我们来讨论一下单点登录SSO的一些实现方式,其中包括对session和cookie的一些讨论。 一、     我们知道http协议是无状态的协议,也就是说一次请求对应一次响应,不和这次请求的上一次和下一次请求产生关联。那么这样就有一个问题,比如说,我们想实现一个购物车,我们往购物车中添加商品,每次刷新发现上一次添加的商品不见了,每次购物车里都是这次添加的商品,前面添加的不见了。为什么?

TangXW的博客 1万+

把 Custom Business Configurations 变成你的定制化维护台:Business Configuration Maintenance Object 设置全解

摘要:SAP BTP的Business Configuration(BCMO)为ABAP环境提供标准化的配置维护方案,通过RAP对象暴露为OData V4服务,自动生成Fiori elements维护界面,省去单独开发应用的成本。关键配置包括:Service Configuration定义业务名称和分组;List Report控制初始加载和视图变体;Object Page配置布局(Tabs/Page)和编辑权限;Table Settings选择表格类型(Grid/Responsive)和创建模式(Inlin

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

XXL-SSO 实现SSO单点登录

1. 概述: 本文旨在使用XXL-SSO开源架构 实现单点登录系统。 2. XXL-SSO简介: XXL-SSO 是一个分布式单点登录框架、只需要登录一次就可以访问所有相互信任的应用系统。 拥有”轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持”等特性。现已开放源代码,开箱即用。 官网地址:https://www.xuxueli.com/xxl-sso/#/ 3. 准备: 下载XXL-SSO https://github.com/xuxueli/xxl-ssohttp

zetor的专栏 6119

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SSO单点登录原理详解

sso单点登录

Yilong18的博客 3650

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 谷歌公布 2023 年最受欢迎 Chrome 扩展
下一篇: “去他的 985,命都快没了!”
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值