单点登录简述

简介: 单点登录简述

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

如下图,用户只需要认证一次,便可以在多个拥有访问权限的系统中访问。

单点登录原理

sso需要一个独立的认证中心,所有子系统都通过认证中心的登录入口进行登录,登录时带上自己的地址,子系统只接受认证中心的授权,授权通过令牌(token)实现,sso认证中心验证用户的用户名密码正确,创建全局会话和token,token作为参数发送给各个子系统,子系

单点登录实现方式

单点登录的实现方案,一般就包含:Cookie,Session,token,目前的大型网站都是采用分布式Session的方式。

基于Cookie+Redis的单点登录

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

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

cookie:把redis里面生成key值放到cookie里面

下面对上图简要描述

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

2sso认证中心发现用户未登录,将用户引导至登录页面

3用户输入用户名密码提交登录申请

4sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌

5sso认证中心带着令牌跳转回最初的请求地址(系统1)

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

7sso认证中心校验令牌,返回有效,注册系统1

8系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源

9用户访问系统2的受保护资源

10系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数

11sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌

12系统2拿到令牌,去sso认证中心校验令牌是否有效

13sso认证中心校验令牌,返回有效,注册系统2

14系统2使用该令牌创建与用户的局部会话,返回受保护资源

用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系

1局部会话存在,全局会话一定存在

2全局会话存在,局部会话不一定存在

3全局会话销毁,局部会话必须销毁

Cookie的作用在于充当一个信息载体在Server端和Browser端进行信息传递,而Cookie一般是以域名为分割的,例如a.xxx.com与b.xxx.com的Cookie是不能互相访问的,但是子域名是可以访问上级域名的Cookie的。 即a.xxx.com和b.xxx.com是可以访问xxx.com下的Cookie的,于是就能将顶级域名的Cookie作为OpenId的载体。

验证步骤和上第二个方法非常相似:

在提供验证服务的站点里登录;

●将OpenId写入顶级域名Cookie里;

●访问子系统(Cookie里带有OpenId)

●子系统取出OpenId通过并向验证服务发送OpenId

●返回用户认证信息

●返回授权后的内容

但使用该方式把信任存储在客户端的Cookie中会有两个问题:

●Cookie不安全

●不能跨域实现免登

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

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

流程运行:

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

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

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

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

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

使用token实现

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

(1)可以把字符串通过cookie返回

(2)把字符串通过地址栏返回

2.再去访问项目其他模块,每次访问在地址栏带着生成的字符串token,在访问模块里面获取地址字符串,根据字符串获取用户信息。如果可以获取到就能登录,反之则未登录。

实现方式如下图:


目录
相关文章
|
存储 安全 Java
Spring Boot整合Spring Security--学习笔记
Spring Boot整合Spring Security--学习笔记
476 1
|
3月前
|
人工智能 Rust 自然语言处理
Qoder NEXT 测评:不止是代码补全,而是“会思考的编程搭档”
本次测评聚焦三大核心问题: 能否超越传统 FIM,支持真实开发中的结构化编辑? 编辑建议是否精准、符合开发者意图? 是否具备持续进化能力,越用越好?
|
7月前
|
数据库
六大常用地震数据库,地震波库特点及选波建议
本文综述全球六大强震动数据库(PEER、USGS、K-NET、ITACA、TR-NSMN、GeoNet)的发展背景、数据特点与分布特征,对比其台站布局、时间覆盖与地震参数,分析适用场景,为地震工程研究中的数据选取提供参考。
|
存储 NoSQL 中间件
单点登录的原理、实现、以及技术方案比较详解
本文详细介绍单点登录(SSO)的定义、原理、实现细节,探讨其在大型网站中的应用,帮助读者理解如何通过分布式Session实现高效的用户认证与授权。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
单点登录的原理、实现、以及技术方案比较详解
|
7月前
|
JSON 前端开发 API
汽车配件:使用VIN码查询API精准匹配车型配件,提升用户信任
VIN码是汽车的唯一“身份证”,通过API可精准解析车型信息,实现配件99.5%以上匹配度。本文详解VIN码API的工作流程、技术实现与信任提升价值,助力汽配销售从经验判断迈向数据驱动,降低退货率,提升用户体验与复购。
959 0
|
供应链 安全 区块链
区块链技术在供应链管理中的应用与挑战
区块链技术作为一种分布式账本技术,其不可篡改和透明的特性使其成为供应链管理中的理想解决方案。本文将探讨区块链如何优化供应链流程、提升可追溯性和减少运营成本。同时,我们也将分析实施过程中的技术限制、监管问题和行业接受度等挑战。
271 24
|
开发框架 Java 开发者
Spring Boot中的自动装配原理
Spring Boot中的自动装配原理
3796 1
|
监控 前端开发 安全
JVM工作原理与实战(十一):双亲委派机制
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了双亲委派机制、父类加载器、双亲委派机制的主要作用、双亲委派机制常见问题等内容。
1191 1
|
存储 NoSQL 应用服务中间件
SSO(单点登陆)
SSO(单点登陆)