实现单点登录

指再多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。

相比于单系统登录,sso需要一个独立的认证中心,只有认证红心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理,用下图说明:

001
002

下面对上图简要描述:

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

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

  • 局部会话存在,全局会话一定存在
  • 全局会话存在,局部会话不一定存在
  • 全局会话销毁,局部会话必须销毁

注销

单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明:

logout

SSO认证中心一直监听全局会话的状态,一旦全局绘画销毁,监听器将通知所有注册系统执行注销操作。下面对上图简要说明:

  1. 用户向系统1发起注销请求
  2. 系统1恩据用户与系统1建立的会话id拿到令牌,向SSO认证中心发起注销请求;
  3. SSO认证中西校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址;
  4. SSO认证中心向所有注册系统发起注销请求;
  5. 各注册系统接受SSO认证中心的注销请求,销毁局部会话;
  6. SSO认证中心引导用户至登录页面。

部署

单点登录设计SSO认证中心与众子系统,子系统与SSO认证中心需要通信以交换令牌,校验令牌及发起注销请求,因而子系统必须继承SSO的客户端,SSO认证中心则是SSO服务端,整个单点登录过程实质上事SSO客户端与服务端通信的过程,用下图描述:

sso-deploy
SSO认证中心与SSO客户端通信方式有多种,这里以简单好用的httpClient为例,web service,rpc,restful api都可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361491.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

VMware虚拟机安装macOS

VMware虚拟机安装macOS 文章目录 VMware虚拟机安装macOS先看效果一、准备工作①:镜像资源下载②:虚拟机③:安装macOS所必要的插件 二、开始安装①:创建新的虚拟机②:自定义硬件③:开启虚拟机 先看效果 一、…

Packet tracer-实现VLAN内部通信

案例一: 要求PC1和PC2,PC3和PC4之间能够实现互访 两个VLAN,一个VLAN对应一个子网 以S2为例: 步骤 1:在 S2 上创建并命令 VLAN,把VLAN划分给活动的端口。 步骤 2:在 S3 上创建并命令 VLAN&…

在 WLC上配置WPA2-Enterprise WLAN

实验大纲 第1部分:创建一个新的WLAN 第1步:创建一个新的VLAN接口 第2步:配置WLC让它使用RADIUS服务器 第3步:创建一个新的WLAN 第4步:配置WLAN安全策略 第2部分:配置DHCP范围和SNMP 第1步&#xff1…

软件测试相关内容第二弹--软件测相关概念

学习完这部分内容后,可以掌握测试相关基础概念,掌握常见的开发模型、测试模型。 主要进行四个部分内容的学习:需求、bug、测试用例、开发模型和测试模型。 目录 1. 什么是需求 1.1 需求的定义 1.2 为什么有需求 1.3 测试人员眼里的需求…

ElementUI Form:Switch 开关

ElementUI安装与使用指南 Switch 开关 点击下载learnelementuispringboot项目源码 效果图 el-switch.vue 页面效果图 项目里el-switch.vue代码 <script> export default {name: el_switch,data() {return {value: true,value1: true,value2: true,value3: 100,value…

Nginx 部署指定文件夹下的项目(本地测试)

1、配置 vue.config.js&#xff0c;指定生成环境的包 //部署生产环境和开发环境下的URLpublicPath: process.env.NODE_ENV production ? "/marketing" : "/",///npm run build 或 varn build 生成文件的日录名称(要利baseUrl的牛产环境路一致)(默认dist…

三、Redis之数据类型

3.1 Key操作 3.1.1 相关命令 序号命令语法描述1DEL key该命令用于在 key 存在时删除 key2DUMP key序列化给定 key &#xff0c;并返回被序列化的值3EXISTS key检查给定 key 是否存在&#xff0c;存在返回1&#xff0c;否则返回04EXPIRE key seconds为给定 key 设置过期时间&a…

Redis简单阐述、安装配置及远程访问

目录 一、Redis简介 1.什么是Redis 2.特点 3.优势 4.数据库对比 5.应用场景 二、 安装与配置 1.下载 2.上传解压 3.安装gcc 4.编译 5.查看安装目录 6.后端启动 7.测试 8.系统服务配置 三、Redis远程访问 1.修改访问IP地址 2.设置登录密码 3.重启Redis服务 …

二次元插画风生图咒语

中文&#xff1a;一个可爱的卡通女孩穿着漂亮的毛衣&#xff0c;抱着一只可爱的小狗&#xff0c;全身&#xff0c;白色背景&#xff0c;粉色和蓝色&#xff0c;基思哈林风格的涂鸦&#xff0c;Sharpie插图&#xff0c;MBE插图&#xff0c;粗体线条&#xff0c;垃圾美风格&#…

Verdi简介

3.1.1 Verdi的历史 相信做IC验证的朋友或多或少都使用过VCS和Verdi这两个工具&#xff0c;这两个工具目前都属于synopsys公司&#xff0c;但是Verdi的来源可谓一路坎坷。 Verdi最开始是由novas公司设计的&#xff0c;在2008年&#xff0c;被台湾的EDA厂家springsoft&#xff08…

MySQL基础知识(二)

MySQL基础知识&#xff08;二&#xff09; 一、MySQL简介 MySQL 是一个关系型数据库管理系统&#xff0c; 由瑞典 MySQL AB 公司开 发&#xff0c; 目前属于 Oracle 公司。MySQL 是一种关系型数据库管理系 统&#xff0c;关系型数据库将数据保存在不同的表 中&#xff0c;而…

微信小程序如何实现实时显示输入内容

如下所示&#xff0c;在许多场景中需要实时显示用户输入&#xff0c;具体实现见下文。 .wxml <input type"text" placeholder"请输入{{item.value}}(必填)" style"width:80%;" bindinput"get_required_value" data-info"{{it…

壹[1],Xamarin开发

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…

LeetCode —— 137. 只出现一次的数字 II

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

C++类和对象(中)六个默认成员函数

&#x1f308;类的六个默认成员函数 任何一个类&#xff0c;不管是否为空&#xff0c;都会在生成的时候默认调用六个成员函数&#xff0c;这些成员函数可以自动生成&#xff0c;也可以由程序员写出。这六个默认成员函数分别是&#xff1a; 最主要的是前四个&#xff1a; 初始…

DDD学习使用

简介 DDD(Domain-Driven Design)&#xff1a;领域驱动设计。 Eric Evans “领域驱动设计之父” DDD不是架构&#xff0c;而是一种方法论&#xff08;Methodology&#xff09;微服务架构从一出来就没有很好的理论支撑如何合理的划分服务边界&#xff0c;人们常常为服务要划分多…

6.3 内存池模式

Bruce Powel Douglass大师介绍-CSDN博客https://blog.csdn.net/ChatCoding/article/details/134665868嵌入式软件开发从小工到专家-CSDN博客https://blog.csdn.net/ChatCoding/article/details/135297955C嵌入式编程设计模式源码-CSDN博客https://blog.csdn.net/ChatCoding/art…

Android 基础技术——Handler

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 Handler 为什么一个线程对应一个Looper&#xff1f; 核心&#xff1a;通过ThreadLocal保证 Looper.prepare的时候&#xff0c;ThreadLocal.get如果不空报异常&#xff1b;否则调用ThreadLocal.set,…

2、趋势Trend (copy)

利用移动平均数和时间虚拟模型对长期变化进行建模。 文章目录 1、什么是趋势?2、移动平均图3、工程趋势4、示例 - 隧道交通1、什么是趋势? 时间序列的趋势组成部分代表了序列均值的持久、长期变化。趋势是序列中变化最慢的部分,代表了最重要的大时间尺度。在产品销售的时间…