单点登录实现原理(SSO)
简介
- 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘宝与天猫、新浪微博与新浪博客等都用到了这个技术。
原理
- 单点登录
- 有一个独立的认证中心,只有认证中心才能接受用户的用户名和密码等信息进行认证,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,当用户提供的用户名和密码通过认证中心认证后,认证中心会创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌即得到了授权,然后创建局部会话。
- 示例:
下面对上图进行解释:- 当用户还没进行用户登录的时候
- 用户去访问系统1的保护资源 ,系统1检测到用户还没登录,跳转至SSO认证中心,SSO认证中心也发现用户没有登录,就跳转到用户至认证中心的登录页面
- 用户在登录页面提交用户相应信息后,认证中心会校验用户信息,如果用户信息正确的话认证中心就会创建与该用户的全局会话(全局会话过期的时候,用户就需要重新登录了。全局会话中存的信息可能有令牌,用户信息,及该在各个系统的一些情况),同时创建授权令牌,然后进行下一步,否则认证中心给出提示(用户信息有误),待用户再次点击登录的时候,再一次进行校验用户信息
- 认证中心带着令牌跳转到用户最初请求的地址(系统1),系统1拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心校验令牌,若该令牌有效则进行下一步
- 注册系统1,然后系统1使用该令牌创建和用户的局部会话(若局部会话过期,跳转至SSO认证中心,SSO认证中心发现用户已经登录,然后执行第3步),返回受保护资源
用户已经通过认证中心的认证后
用户访问系统2的保护资源,系统2发现用户未登录,跳转至SSO认证中心,SSO认证中心发现用户已经登录,就会带着令牌跳转回系统2,系统2拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心返回有效,注册系统2,系统2使用该令牌创建与用户的局部会话,返回受保护资源。如果系统1的局部会话存在的话,当用户去访问系统1的保护资源时,就直接返回保护资源,不需要去认证中心验证了
- 当用户还没进行用户登录的时候
局部会话存在,全局会话一定存在;全局会话存在,局部会话不一定存在;全局会话销毁,局部会话必须销毁
如果在校验令牌过程中发现客户端令牌和服务器端令牌不一致或者令牌过期的话,则用户之前的登录就过期了,用户需要重新登录关于令牌可参考:基于跨域单点登录令牌的设计与实现
- 单点注销
- 在一个子系统中注销,全局会话也会被注销,所有子系统的会话都会被注销
- 示例:
用户向系统1发出注销请求,系统1根据用户与系统1建立的会话id从会话中拿到令牌,向SSO认证中心发起注销请求,认证中心校验令牌有效,会销毁全局会话,同时取出此令牌注册的系统地址,认证中心向所有注册系统发出注销请求,各系统收到注销请求后销毁局部会话,认证中心引导用户跳转值登录页面。
- 整体陈述
- 单点登录涉及SSO认证中心与多个子系统,子系统与SSO认证中心需要通信(交换令牌、校验令牌及发起注销请求等),子系统中包含SSO的客户端,SSO认证中心是服务端
- 认证中心与客户端通信可通过 httpClient、web service、rpc、restful api(url是其中一种) 等实现
- 客户端与服务器端的功能
- 客户端:
- 拦截子系统未登录用户请求,跳转至sso认证中心
- 接收并存储sso认证中心发送的令牌
- 与服务器端通信,校验令牌的有效性
- 建立局部会话
- 拦截用户注销请求,向sso认证中心发送注销请求
- 接收sso认证中心发出的注销请求,销毁局部会话
- 服务器端:
- 验证用户的登录信息
- 创建全局会话
- 创建授权令牌
- 与客户端通信发送令牌
- 校验客户端令牌有效性
- 系统注册
- 接收客户端注销请求,注销所有会话
- 客户端:
本文参考:单点登录原理与简单实现
本文有些地方可能写的不对,如果发现有啥错误的话,欢迎赐教,不胜感激。
如需转载请加上出处:http://www.cnblogs.com/zhuchenglin/p/8968530.html
单点登录实现原理(SSO)的更多相关文章
- SSO单点登录实现原理与总结
一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...
- SSO单点登录实现原理
SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...
- portal单点登录的原理与实现还有ESB
portal单点登录的原理与实现还有ESB 在毕业论文中有描述到这一点.我给我出的截图
- sso单点登录系统原理与实现
sso单点登录 1.认识并理解sso及其应用,并能根据其实现原理自行实现sso 没有使用sso单点登录的系统用户再访问同一个系统的不同模块都必须的登录 使用sso单点登录,用户只需要登录一次,并且可以 ...
- 单点登录的原理与CAS技术的研究
1.什么是单点登录? 关于单点登录技术的说明参考文章:http://www.cnblogs.com/yupeng/archive/2012/05/24/2517317.html 一般来说,整个原理大家 ...
- 浅析C#中单点登录的原理和使用
什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...
- 单点登录之 CAS SSO 从入门到精通(第一天)
转自:http://blog.csdn.net/lifetragedy/article/details/43817903 啊......it's quite a long time. 好久没更新博客了 ...
- CAS单点登录(一)——初识SSO
转载:https://blog.csdn.net/Anumbrella/article/details/80821486 一.初识CAS 首先我们来说一下CAS,CAS全称为Central Authe ...
- 使用Cookie实现跨域单点登录的原理
对于构建分布式系统来说业务功能的物理部署会随着新业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当新业务或子系统部署在不同的物理机上,我们去访问不同的业 ...
随机推荐
- Python字符串的两种方式——百分号方式,format的方式
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- MariaDB存储过程笔记
FECTH INTO 字段名不能与 CURSOR FOR 中select字段名一致,否则FETCH出的值均为空. DECLARE 字段名不能与 CURSOR FOR 中select语句内where条件 ...
- Vue实例学习过程中碰到的小问题
在使用插值表达式{{ }}取data中list数组中的值时把整个表达式当做文本显示了,原因不明,但是使用v-text替换插值表达式之后问题得到解决. 原因已经查明,因为第78行,定义对象car时后面 ...
- spring+myBatis 配置多数据源,切换数据源
注:本文来源于 tianzhiwuqis <spring+myBatis 配置多数据源,切换数据源> 一个项目里一般情况下只会使用到一个数据库,但有的需求是要显示其他数据库的内容,像这样 ...
- mui slider禁止滑动
网上方法: mui('.mui-slider').slider().setStopped(true); 实际使用 mui('.mui-slider').slider().stopped = true; ...
- UGUI中粒子特效与UI的遮挡问题
问题背景: 在做主线任务时发现完成任务后的特效显示穿透上面的UI层,不美观,策划不乐意了,抓紧解决下 解决思路: 首先讲下影响渲染顺序的因素: 能够影响渲染顺序的因素有:1.Camera Depth ...
- vmware 虚拟机报错 删除文件夹,可以恢复
- MySQL 常用命令(Linux)
一.查看MySQL服务 MySQL服务应该随开机自动启动的.正常情况下,查看开机自动启动的服务使用chkconfig命令,如下: chkconfig --list 实际mysql是否真正启动,是否真正 ...
- GLSL ES 3.0 和 2.0 的区别
GLSL ES 3.0 和 2.0 的区别 语法区别 attribute和varying. 取而代之的是 in和out 头文件多了个#version 300 es 纹理 texture2D 和 tex ...
- nand flash和nor flash的区别
NOR和NAND是现在市场上两种主要的非易失闪存技术. Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面. 东芝于1989年开发出NAND ...