最近接触了一点单点登录的知识,有一点理解,记录一下。有些问题并没有找到完美的解决方法,还需要找点已有框架来看看。

欢迎留言探讨。

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原理的更多相关文章

  1. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析

    写着前面 IdentityServer4的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章,比如: ...

  2. 浅析C#中单点登录的原理和使用

    什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...

  3. SSO单点登录实现原理与总结

    一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...

  4. cas单点登录 SSO 的实现原理

    原文出处: cutesource   欢迎分享原创到伯乐头条 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户 ...

  5. SSO单点登录实现原理

    SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...

  6. 单点登录 SSO 的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...

  7. 单点登录SSO的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  8. 单点登录SSO的实现原理 (转)

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  9. 单点登录 SSO 的实现原理 SESSION COOKIE Memcache

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

随机推荐

  1. Java中int与Integer

    一般小写字母开头的是数据类型(如int double),大写字母开头的一般是封装为类(如Double),里面有很多方法,比如实行转换Integer.parseInt(arg0),可以把其他类型的数据转 ...

  2. mybatis源码分析(3)——SqlSessionManager类

    从上图可能看出,在 mybatis中,SqlSession的实现类有两个,其中SqlSessionManager类不但实现了SqlSession接口,同时也实现了SqlSessionFactory接口 ...

  3. Cocos2d-x 坑之二:目录改动后, cannot run on the selected destination

    1:2dx开发中,目录改动后,经常会碰到这个提示错误:  cannot run on the selected destination 解决方法:一般是因为 Info.plist文件属性问题,把 Ta ...

  4. [C#]网络编程系列专题二:HTTP协议详解

    转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...

  5. response常见应用、response细节、输出随机图片、定时刷新网页

      response常见应用 向客户端输出中文数据 分别以OutputStream和PrintWriter输出 多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为 思考:用O ...

  6. HDU-1686 Oulipo

    学习:重点理解这句话的意思: next[j]会告诉我们从哪里开始匹配     模板题. Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory ...

  7. HDU-2568 前进

    http://acm.hdu.edu.cn/showproblem.php?pid=2568 前进 Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  8. TFS2010中文版安装

    VS2010的中文版出来一段时间了,对TFS2010的了解,也有一段时间了,只不过中文版还是首次见到.于是把第一次安装的图片分享出来,公供参数. TFS2010安装环境是操作系统为Windows Se ...

  9. Unity3d shader之SWAP Force Depth-of-Field Shader

    由于博主常年逃课,所以期末考试期间只能突击,但偶尔还能拿个奖学金啥的,哈哈,所以近一个月没有做游戏,也没有发博客= =... 这个景深的方法很简单 我们需要求的是CoC(circle of confu ...

  10. bayer图像格式

    Bayer数据,其一般格式为:奇数扫描行输出 RGRG……偶数扫描行输出 GBGB…… 根据人眼对彩色的响应带宽不高的大面积着色特点,每个像素没有必要同时输出3种颜色.因此,数据采样时, 奇数扫描行的 ...