单点登录SSO原理
最近接触了一点单点登录的知识,有一点理解,记录一下。有些问题并没有找到完美的解决方法,还需要找点已有框架来看看。
欢迎留言探讨。
1 概念
1.1 概念及理解
有一个网上广为流传的定义“SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证”。
个人理解,其中的“同一服务器”的限制应当去掉,关键在于“一次登录”,另外,很少有人提及“退出”的处理逻辑,因此较为完备的定义应该如下:
l 单点登录SSO指用户访问一组相互关联的应用时,只需登录一次,即可访问所有应用中其有权限访问的部分,而不需要每个应用都登录一次,即便各个应用有自身的用户系统。
l 单点登录也应具备“单点退出”的内涵:即用户在任意业务应用退出后,即可保证在所有业务应用及认证服务退出。
l 单点登录应当与应用的具体物理部署没有关系,所谓一组相互关联的应用,仅由业务条件来约束。
单点登录可分为WEB-SSO和非WEB-SSO,本文仅讨论WEB-SSO。根据多个应用的域名关系,可分为“具有公共域名的SSO”和“跨域名的SSO”,所谓具有公共域名的SSO,指多个应用及认证服务具有公共的域名,例如password.baidu.com,tieba.baidu.com,map.baidu.com即具有公共域名baidu.com。
2 模型及流程
2.1 模型
单点登录涉及的几个系统角色说明如下:
l 认证服务:认证服务提供两个职责,其一,提供用户登录的接口界面并对用户进行认证,例如提供用户输入用户名、密码的页面;其二,令牌颁发及校验:对于登录后的用户,生成并颁发令牌给用户,并提供校验令牌的逻辑。系统中逻辑上仅有一个认证服务。
l 业务应用:提供业务相关服务的应用,系统中可有多个业务应用,所有业务应用应当支持使用认证服务颁发的令牌来确认用户身份并相应控制其在本业务系统中的权限。也即是说,用户认证交给了认证服务来完成,但是权限管理则应当仍然由各个业务系统管理。
2.2 流程
2.2.1 未登录访问业务应用
典型流程如下图,以下几点需要注意:
l 本序列图仅为一种实现方式,并非唯一实现;SSO应当存在多种变种,适用于不同场景。
l SessionId相关问题:
- 业务应用及认证服务均应设置各自的sessionId;
- 业务应用何时设置sessionId:取决于业务应用配置,最迟应当在令牌校验通过后设置,否则后续无法使用session机制来判断登录状态;也有可能在浏览器访问业务应用第一个页面时,即可获得sessionId(即步骤3)。
- 认证服务何时设置sessionId:登录成功后即步骤6或之前应设置sessionId
- Http Session的相关解释可参考 http://lavasoft.blog.51cto.com/62575/275589/。
l 如认证服务、业务应用属于同一个域名下的子域名,则可不必使用“URL中附件令牌”的方式来传递令牌,也可使用domain为二者公共域名的Cookie来传递令牌。
l 业务应用需要根据令牌获得用户的信息以处理本业务应用内的权限等,有多种方式来实现,例如步骤10返回用户ID等用户信息;
l 步骤9/10也可省略,例如直接由业务应用按照约定的算法从令牌中解析出用户信息,并根据解析出的信息进行令牌的校验。

2.2.2 已登录访问业务应用
本流程描述用户已在认证服务登录成功,并且成功访问业务应用1后再访问业务应用2的场景,以下几点为关键点:
l 本序列图描述的是跨域名时的场景,如多个业务应用具有公共域名,并且“未登陆状态访问业务应用”中已正确把令牌设置至domain为公共域名的Cokkie中,则步骤1时,浏览器会自动带上令牌访问业务应用2,业务应用2直接校验令牌即可判断用户是否已通过认证。
l 步骤4/5:认证服务此时可通过浏览器携带的认证服务sessionId来判断用户的登录状态,因此不必要求用户输入用户名、密码登录,因此步骤3至步骤10对用户而言其实是透明的。

2.2.3 退出
一种退出实现的序列图如下,几点需要注意的:
l 步骤7,认证服务通知退出时,仅能携带用户ID,业务应用需要具有用户id与其自身session的映射关系。

3 其他关键问题
3.1 令牌有效期
认证服务中的令牌应当具备有效期,否则“直接关闭浏览器”的情况会导致认证服务中的令牌数量不断累积。
另一方面,一般情况下,用户的操作是在各业务应用,而不在认证服务,因此如果认证服务中令牌的有效期设置过短,则可能会出现这种情况:用户使用认证服务登录成功,持续访问业务应用1,一段时间后,用户访问业务应用2,但是此时认证服务中的令牌已过期,则会出现要求用户重新登录的错误响应。
解决办法:
第一,可以考虑在业务应用的页面均添加一个隐藏的对认证服务的访问,这样每次访问业务应用的任何页面也会隐藏的访问认证服务,从而保证认证服务的session不过期,即保证了令牌的不过期。这个方法的不好之处在于对于业务应用改动虽然不大,但是需要散布至所有页面,如果是对已有的业务应用进行改造,则这个缺点更突出。
第二,可考虑在业务应用和认证服务之间增加类似于“心跳”接口。
3.2 安全性保证
l 含令牌的接口应当使用HTTPS协议,保证令牌传输过程中的安全性;
l 认证服务应当限制“校验令牌”接口调用方,仅允许可信任的系统来调用;
单点登录SSO原理的更多相关文章
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
写着前面 IdentityServer4的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章,比如: ...
- 浅析C#中单点登录的原理和使用
什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...
- SSO单点登录实现原理与总结
一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...
- cas单点登录 SSO 的实现原理
原文出处: cutesource 欢迎分享原创到伯乐头条 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户 ...
- SSO单点登录实现原理
SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...
- 单点登录 SSO 的实现原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...
- 单点登录SSO的实现原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- 单点登录SSO的实现原理 (转)
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- 单点登录 SSO 的实现原理 SESSION COOKIE Memcache
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
随机推荐
- Learning WCF Chapter2 Data Contracts
A data contract describes how CLR types map to XSD schema definitions. Data contracts are the prefer ...
- MySQL源码 解析器
sql请求发送到server端,需要经过解析器生成内部的数据结构对象,以方便进行优化和生成执行计划.解析器主要做了两件事情,词法分析和语法分析. 词法和语法分析:mysql使用lex词法分析器,yac ...
- POJ_1631_Bridging_Signals_(动态规划,LIS)
描述 http://poj.org/problem?id=1631 铁路左右相连,要求去掉一些边,使得剩下的边不交叉,求剩余边数的最大值. Bridging signals Time Limit: 1 ...
- CH Round #45 能量释放
能量释放 CH Round #45 - alan有一些陷阱 III 题目描述 alan得到一块由个能量晶体构成的矿石,对于矿石中的每一个能量晶体,如果用化学物质刺激某一个能量晶体,就能使它释放能量. ...
- ubuntu12.04 mysql服务器乱码问题的解决办法
网上方法太杂乱,有些甚至很复杂,其实ubuntu下只需要修改一个配置文件即可. sudo vi /etc/mysql/my.cnf 在[client]下加入 default-character-set ...
- HDU-1701 Binary Tree Traversals
http://acm.hdu.edu.cn/showproblem.php?pid=1710 已知先序和中序遍历,求后序遍历二叉树. 思路:先递归建树的过程,后后序遍历. Binary Tree Tr ...
- 发送一个简单的http get 请求并且响应
问题 如何发送一个简单的HTTP GET请求并且取回相应的HTTP响应. 设计 创建一个WebClient类的实例,然后使用它的DownloadData()方法. 方案 string uri = &q ...
- http Error 503 server unavailable
服务器的环境为: 系统:Windows server 2008 64位 数据库:Oracle 10g WEB应用服务:IIS 7.0+.Net Framework 4.0 无法打开服务元数据库路径“/ ...
- JavaScript高级程序设计40.pdf
DOM0级事件处理程序 就是将一个函数赋值给一个事件处理程序属性,具有简单.跨浏览器优势,首先必须取得一个操作对象的引用,每个元素(包括window和document)都有自己的事件处理程序属性,这些 ...
- JavaScript高级程序设计27.pdf
第11章 DOM扩展 W3C将一些已经成为事实标准的专有扩展标准化并写入规范当中.对DOM的两个主要扩展是SelectorsAPI(选择符API)和HTML5 选择符API 就是根据CSS选择符选择与 ...