单点登录原理理解

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

欢迎留言探讨。

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  认证服务应当限制“校验令牌”接口调用方,仅允许可信任的系统来调用;

时间: 2024-10-11 04:00:16

单点登录原理理解的相关文章

[转]单点登录原理与简单实现

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让

单点登录原理与简单实现

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让

单点登录原理

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让

CAS实现SSO单点登录原理

1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目. 1.2.  主要特性 1.   开源的.多协议的 SSO 解决方案: Protocols : Custom Protoc

java单点登录原理与简单实现

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让

CAS实现SSO单点登录原理(转)

1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目. 1.2.  主要特性 1.   开源的.多协议的 SSO 解决方案: Protocols : Custom Protoc

单点登录原理与实现

单点登录原理与实现 关于单点登录,在项目中用到的是对于cookie中设置的domain 为二级域名,这样二级域名下的cookie都可以共享,将sessionId存储在cookie中,对于session信息,则是将sessionId 和session信息分别作为键值对存储在Redis中,这样可以简单实现单点登录. 最近看到一篇文章,里面对于单点登录进行较为深入的理解,觉得很有学习意义. 一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议

单点登录原理与简单验证

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让

深入浅出让你理解跨域与SSO单点登录原理与技术

一:SSO体系结构 SSO ? SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一. 体系结构 ? 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录:根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--token:用户再访问别的应用的