SSO-单点统一登录系统的设计与实现
本文主要基于web类应用展开讨论,提供的是一种通用机制和方法,所以不论何种技术栈都可进行相应的具体实现。
实现目标
可以在相同或跨域环境下完成各应用的统一登录/注销
方案原理
本质上是采用了web应用的会话技术和机制,所以才使得此方案的可操作性和通用性乃至规范性上有了天然的优势。会话追踪主要有Session、Cookie两种实现,背后的原理和机制大家也都非常熟悉。抛开它们的些许差异不谈,共通的思想都是在身份得到认证通过后,保持一个特定的可溯身份标识(Session ID / Cookie字符串),当然了他们都是以HTTP的Cookie部分保存的。又可知,当浏览器禁用了Cookie,为了让Session继续工作,就需要把Session Id附带到url部分来传递。说到这,就引出了我们想要表达的重点,即在应用服务器和统一认证服务器间传递认证信息的字符串标识(姑且称之Token),Token和Session ID我们完全可当作一个同源的东西来看待,也就是说没有额外需求场景下又恰好使用的Session,完全可以拿Session ID直接来用。之所以引出Token,主要是为了将使用Cookie作为用户认证手段的应用统一起来。
系统组件
- 统一认证服务器(http://sso.com) - 此服务保存关于用户的公共信息,各应用均请求该服务进行登录/注销和身份有效性验证。
- 应用服务器(a.com, http://b.com) - 此类服务保存用户的具体业务信息和相应的角色权限, 参与到SSO应用群中的各个独立应用站点。
处理流程
- 登录
- 用户访问a/http://b.com,本地域检查未登录,跳转至步骤2(本地域自由选择使用Session / Cookie来记录用户登录认证标识)
- http://sso.com域检查本地用户登录认证信息,用户是否已登录,如未登录先进行登录,登录成功后记录本地用户登录认证标识(Session或Cookie),并生成保存一个唯一的Token来标识用户,然后在URL中携带以上Token跳转至来源应用域(形式如:a/b.com?token=xxxxxx)
- a/http://b.com域如接收到URL中的token串后,请求http://sso.com提供的验证接口检查token的真实有效性,如有效则同时返回用户的关键身份信息(如用户ID、用户名、头像URL、...)同时保存本地的用户登录认证标识。
- 注销
- 注销其实可以分成两类场景: (1a)用户从应用a/http://b.com本地退出,本地域检查已经登录,对本地认证登录认证标识做销毁过期处理,并将URL跳转至http://sso.com的注销地址(如:http://sso.com/logout)。(1b)用户从应用a/http://b.com的外部域退出,对于此种情形的应对,需要在各应用登录后执行一段定时(时长可按实际情况酌情考虑,如希望准实时就将间隔尽量小,灵活掌握)轮询的jsonp脚本携带登录时的Token信息,去请求http://sso.com检测是否已退出(如:http://sso.com/checkExist?token=xxxxxx),如检测到为已退出状态,对本地认证登录认证标识做销毁过期处理,但不用再额外通知http://sso.com了。
- http://sso.com本地域退出或接收到来自外部应用的logout的请求后,将本地域相应Token标识用户的登录认证标识做销毁过期处理。
以上即是一套完整的且具通用性的sso解决方案,实现简单而对新搭建或旧有系统的改造几乎无侵入性,只需增加登录和注销时所需的处理逻辑。
补充一点额外的话,有没有觉得这个方案如果往再更大范围去想,是完全可以当作一套更具开放性的三方登录(如:Open ID / Oauth)平台服务,各平台也无需注册,权当成一个需要接入sso应用方对接就可完成。
SSO-单点统一登录系统的设计与实现的更多相关文章
- SSO单点登录的研究
一.单点登录的概述 单点登录(Single Sign On),简称为 SSO,SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 用以解决同一公司不同子产 ...
- 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- 单点登录系统(SSO)的开发思路
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- 单点登录系统(SSO)详细设计说明书(上篇)
1.引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书. 同时,说明书也发挥与策划和设计人员更好地沟通的作用. 1.2 ...
- 多系统实现单点登录方案:SSO 单点登录
一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...
- 系统的讲解 - SSO单点登录
目录 概念 好处 技术实现 小结 扩展 概念 SSO 英文全称 Single Sign On,单点登录. 在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统. 比如:淘宝网(www.t ...
- 单点登录系统---SSO
1.------------------SSO介绍--------------------------------- 有什么卵用?搞什么飞机的? 大家看看这个图,一个系统是没有问题.如果是分布式的系统 ...
- Atitit.单向sso 单点登录的设计与实现
Atitit.单向sso 单点登录的设计与实现 1. 单点登录sso 的三大解决方案1 2. 新方案:密码管理器方案1 3. 调用方1 4. 自动登录登录2 5. 主页跳转2 1. 单点登录sso ...
- 【SSO】单点登录系统
一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...
随机推荐
- ava集合---ArrayList的实现原理
一.ArrayList概述 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存 ArrayList不是线程安全的,只能用在单线程环境下,多 ...
- 面试:Handler 的工作原理是怎样的?
面试场景 平时开发用到其他线程吗?都是如何处理的? 基本都用 RxJava 的线程调度切换,嗯对,就是那个 observeOn 和 subscribeOn 可以直接处理,比如网络操作,RxJava 提 ...
- WEB 表格测试点
Web页面的表格测试点: 1.表格列名 2.表格翻页.表格跳转到多少页.最后一页.首页 3.表格每页显示的数据, 数据的排序 4.表格无数据 5.表格支持的最大数据量 6.表格中数据内容超长时,显示是 ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- Linux下的指令:find,which
1. 在Linux系统下,使用find来查找文件: find [path] [condition] [operation] path指定了在哪个目录查找,condition限定了查找条件,operat ...
- js和jquery判断checkbox是否被选中
js判断: if(document.getElementById("checkboxID").checked){ alert("checkbox is checked&q ...
- RxSwift(一)
文/iOS_Deve(简书作者) 原文链接:http://www.jianshu.com/p/429b5160611f 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...
- 如何进行服务器Linux系统下的ext文件系统修复
一.故障描述 服务器是dell 730系列服务器,存储阵列是MD3200系列存储5T的Lun,操作系统是Linux centos 7,文件系统类型是EXT4,因意外断电,导致系统不能正常启动,修复之后 ...
- Node入门教程(3)第二章: Node 安装
Node 安装 官网下载地址: https://nodejs.org/en/download/ 安装方式 windows 下安装 建议直接选择:Windows Installer (.msi)下载进行 ...
- MySQL 避免重复数据的批量插入与批量更新
[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...
