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】单点登录系统
一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...
随机推荐
- spring boot 1.x.x 到 spring boot 2.x.x 的那些变化
spring boot1 到 spring boot2的配置变化很大,迁移项目到spring boot2过程中发现以下变化 1.java 的 redis 配置添加了属性jedis 旧版 spring: ...
- 基于FPGA的Cordic算法实现
CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲线.指数.对数的 ...
- Eclipse+Pydev环境搭建
1,准备好Eclipse和JAVA,x64 2,安装JDK,配置JAVA环境变量,假设安装路径为 C:\Program Files\Java\jdk1.8.0_161 在系统变量中,新建CLASSPA ...
- 第二周作业(pta存在的问题)
***第一题 错题截图 错因分析:中英文符号用混 改正截图: 思路分析:(1)由输入格式可知,该程序需要用到scanf函数 (2)构建框架 (3)根据要求打入代码 **第二题(正确) 代码截图: 思路 ...
- Beta总结篇
45°炸 031502601 蔡鸿杰 031502604 陈甘霖 031502632 伍晨薇 一.项目预期进展及现实进展 项目预期计划 现实进展 Github使用 √ 日拍 (调用相机.相册) √ 足 ...
- alpha-咸鱼冲刺day7
一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 正在写登陆+注册ing 注册搞出来了!!!!!!!!QAQ(喜极而泣!!!!.jpg) 四,问题困难 数据流程大概是搞定了.不过 ...
- Python2.x的编码问题
1. 计算机编码历史 ASCII Python的默认编码,其是一种单字节的编码.刚开始计算机世界里只有英文,而单字节可以表示256个不同的字符.最开始ASCII只定义了128个字符编码,包括96个文字 ...
- 关于collectionView和tableView的两种cell的出列方法的区别
相信好多人一定会对collectionView和tableView的两种cell出列方法有所疑问,下面以UICollection为例子进行举例说明 假设我们已经创建了一个collectionView, ...
- python 操作Memcached
启动Memcached memcached -d -m 10 -u root -l 10.211.55.4 -p 12000 -c 256 -P /tmp/memcached.pid 参数说明: -d ...
- LeetCode & Q217-Contains Duplicate-Easy
Array Hash Table Description: Given an array of integers, find if the array contains any duplicates. ...
