基于WEB的 SSO 解决方案

转载 2007年09月29日 16:57:00
本文提出的解决方案将只解决用户的身份验证,即SSO本义,用户的使用过程中权限由各个业务系统进一步的控制。这种方案简单可行,不仅完成用户帐号的集中管理,而且对于原有的应用不需要做太大的更改,适合快速的解决Single Sign-On问题。

一、SSO实现原理

1、概念:SSO的一种偏向技术的说法:用户只需登陆一次,就可使用多个SSO enable的应用系统。

1)、单一的登陆点。理想的情况是用户通过任何应用系统都能进行SSO,这对于基于Web的系统是可行的。这种单一的登陆点在整个系统的设计中是唯一认证用户的地方,由登陆点将SSO token(针对不同的C/SB/S应用可能还需要传递用户名,口令)传递给应用系统,应用系统利用SSO token来进行用户已认证的验证。我们将这个单一的登陆点称为SSO Entry

2)、SSO enable意味着对应用系统的修改不可避免。并不是任何系统都能够使用SSO,只有那些符合SSO规范,使用SSO API的应用系统才具有SSO的功能。简单地说就是要修改已有的应用系统,屏蔽已有的应用系统的用户认证模块,使用系统提供的SSO API来验证用户,以及对用户的操作进行授权。

3)、需要统一的认证,权限信息库。通常,认证与授权管理模块以一种应用专有的方式实现,系统的授权模型、认证,授权信息存贮结构与访问控制逻辑与应用的业务逻辑之间耦合紧密。这种设计与实现方式的缺点是显而易见的:由于认证、授权模块与应用逻辑之间的紧耦合使得认证、授权模块很难进行扩展与维护;认证、授权模块的设计与编码需要很大的工作量,而且很难在不同的应用系统之间共享与重用。这也是越来越多企业应用需要SSO的原因之一。

SSO要求有统一的认证,权限存放库。但现实中,有的系统无法使用外部的认证,授权信息库,所以就需要在应用系统和Portal Server之间进行认证,同时进行授权信息的数据同步。

2、实现描述:在用户成功登录 weblogic Portal之后,系统提供的Login Delegate机制来为用户登录到其有权可以使用的应用系统。系统提供Logout Delegate机制实现用户的注销功能(即SSO logout)。

用户存取由Portal SSO保护的若干资源,SSO会话服务(Session/SSO Service)提供了授权的证明,这样就不再需要用户重新进行身份验证了。在这种方式下,即使用户要访问不同的域(weblogic domain)的应用,我们提供的Portal SSO Service为其保持会话服务。

同时,SSO还包括的与登录恰恰相反的,统一的注销点,即用户一旦从Portal注销,则亦当从所有参与Portal SSO的应用注销。此处有一个例外,就是当用户从Portal登录并转向一个应用后,经过一段时间后可能会出现用户的该应用的会话还有效时用户的Portal会话过期时,此时用户将只能使用该应用,直到该用户再次登录Portal

3、通过SSO Agent:当用户试图通过浏览器存取受保护的应用资源时,系统提供安装在不同应用上的SSO Agent来截取用户对资源的请求,并检查请求是否存在会话标识符,即token。如果token不存在,请求就被传递给Portal SSO,在Portal SSO上会话服务负责创建会话token,然后认证服务将提供登陆页面以验证用户。

4、创建会话Token:在用户身份验证之前,会话服务就创建了会话tokentoken为随机产生的Portal  Server 会话标识符,该标识符代表了一个确定用户的特定会话。创建会话token后,认证服务把token插入cookie中在用户的浏览器中设定cookie。在token被设定的同时,该用户将会看到一个登陆页面。

5、用户认证:用户收到登陆页面和会话token后,填入合适的认证信息。当用户提交登陆页面后,这些认证信息就被发给认证提供者(authentication provider)(LDAP服务器,RADIUS服务器等)进行验证。一旦认证提供者成功验证了认证信息,用户就被认为是通过了认证。Identity Server会从用户的token中取出会话信息并将会话状态设为有效。此后,用户就可以访问这些受保护的资源。

6cookie和会话tokenCookie是由Web服务器创建的信息包,并传递给浏览器。Cookie 保存类似用户习惯等Web服务器产生的信息。它本身并不表明用户通过了认证。Cookie是特定于某个域的。在Identity Server的实现中,cookie由会话服务产生,并由认证服务设定。而且,Identity Servercookie是会话cookie,存储在内存中。会话token由会话服务创建并插入Cookie。会话token利用安全随机数发生器产生,并包含Portal Server特有的会话信息。在存取受保护的资源之前,用户由认证服务验证,并创建SSO token

二、SSO技术实现

1SSO entry

SSO entry 作为系统唯一的登陆点将完成如下的功能:

1)提供用户身份认证的登陆页面;2)根据用户的权限,显示可供用户使用的应用系统;3)调用用户选择的应用系统(B/SC/S均可);4)为应用系统传递SSO Token(针对不同的C/SB/S应用可能还需要传递用户名,口令);5)关闭SSO6SSO token失效后,关闭SSO entry

注意SSO entry 并不提供通知应用系统SSO token已失效的功能,这一问题并不大,因为SSO token失效后,SSO entry 已被关闭。用户只有重新认证,才能获取新的SSO token

2SSO 部署


 
上面是整个系统的部署的示意图。白色的立方体表示应用系统。浅蓝色的立方体表示Portal SSO平台。从上图可以看出:各个应用系统各个应用系统与SSO entry发生联系。SSO entry 需要向应用系统传递SSO Token,用户名,口令;启动应用系统。

3SSO实现方式

SSO 的实现方式按照应用系统与Portal Server的交互程度分为三种。需要指出这些SSO的实现方式并没有优略之分,不同的实现方式适应不同的应用环境。解决现实中遇到的不同问题。真单点登陆: 通过SSO entry认证后,应用系统利用SSO APIPortal Server通信,验证用户是否经过认证。新开发的应用系统大多使用这种SSO的实现方式。这种方式需要对应用系统的认证模块进行修改。伪单点登陆:通过SSO entry认证后,应用系统还要自己进行用户的认证。这种方式适用于那些无法修改认证模块的应用系统。我们应用系统的整合采用该方式进行。整合第三方软件的单点登陆:TarantellaCitrix都是将C/S应用系统转化为Web应用的第三方软件系统。在某些应用环境下,这类软件将发挥其作用。这种SSO实现方式在实施中并不使用,列出这种使用方式主要用来展现Identity Server的扩展性。

4SSO的实现

1)用户从Portal登录

说明:以上蓝色区域为Portal Server上的服务,白色为需要与Portal进行SSO的应用,绿色为每个应用的SSO Entry。代理登录的具体过程:用户首先登录PortalPortal处理完登录后,启动代理登录,为用户登录应用系统,Portal把用户转向到应用系统,应用系统再把用户在征管系统的sessionID转发给Portal,登录代理(Login Delegate)把用户在征管系统中的sessionID和用户id发到征管系统的SSO Service进行登记,Portal把用户访问转向征管系统SSOEntry,征管系统SSOEntry通过用户的sessionID得到SSOService中记录的用户在Portal的用户userID,并把当前用户认可为此Portal userID对应的在征管系统中的用户,征管系统把用户访问转回Portal。接着登录代理再对SSO应用列表中的其它应用进行代理登录。代理登录完成,用户被重定向到Portal的相关页面。

用户访问应用系统:之后,当用户访问征管的某个应用时,征管系统发现该用户还未经认证,则将其sessionIDSSOService中登记的uid/sessionID比较,如果存在匹配,则认证通过,将用户idsession相关联。之后用户就可以直接访问征管系统了。

2SSO单点注销


 
说明:
 

1)用户注销总是从Portal开始;2)注销代理(Logout Delegate)将注销消息发到各应用的SSO Logout Entry3)应用的SSO Logout Entry注销本地的用户会话记录;4)注销Portal上的用户会话记录。

三、安全性分析

Portal SSO的安全性需要从几个方面理解:

1.客户登录Portal Server之后SSO到应用的安全性,即SSOToken的安全性;
2.
客户无SSOToken时,首先访问应用的安全性;
3.
客户有SSOToken时想通过仿冒别人的有效SSOToken来进行非法的访问。

Portal Server生成的SSO token 因为需要在应用程序间传递,所以SSOToken比较容易被窃取,但Portal Server保证了SSOToken的唯一性,那些盗用合法SSOToken的人无法通过SSOToken的验证。因为SSOToken的生成收集了用户端和服务器端的很多信息,当非法用户持有效的SSOToken试图访问某应用时,该应用将通过Portal ServerSSOService进行SSOToken验证时,SSOToken的这些信息以及Portal Server的安全算法确保了盗用者即使拿到合法用户的SSOToken也无法通过SSOToken的有效性验证。所以SSOToken的安全性也得到了保证。

用户没有SSOToken的时候,如果客户要访问某应用,如果用户没有该应用的会话信息也没有PortalSSOToken,则该用户必须先通过Portal的认证并SSO到该应用;如果用户已经在应用登录成功(可能是该应用保留了原有的认证入口,用户通过该入口访问此应用,也有可能是用户从Portal 登录后,通过SSO访问该应用,经过一段时间后,用户的Portal SSOToken已经过期,但是用户在该应用中的会话仍然保持有效),则用户可以继续使用该应用系统而无需重新认证。但是如果用户想访问Portal或者与Portal进行SSO的其它应用的话,则用户须经过Portal的认证并拿到SSOToken。所以在这种情况下SSOToken也是安全的。

每个用户的SSOToken只在其当次会话过程中有效,离开其当次会话,SSOToken即被视作无效,因此这种情况下也是安全的。

java Web单点登录(SSO)原理及简单实现

摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO...
  • Little_humor
  • Little_humor
  • 2016年02月26日 14:39
  • 3480

SSO(单点登录)解决方案实施经验介绍

单点登录(SSO-Single Sign On),是目前企业应用系统整合的一种流行的解决方案,主要解决的是在多个应用系统中,用户只需要经过一次登录认证,就可以访问所有相互信任的应用系统。很多软件厂商都...
  • yan_dk
  • yan_dk
  • 2011年12月21日 16:06
  • 3585

单点登录、统一认证解决方案

随着数字化的不断普及,大型公式或者单位的各个部门逐渐的上了与本身业务相关的各种各样的系统(在这些系统中,以Web系统居多),几乎每个系统都需要识别操作者的身份,并根据其不同的身份,分配一定的权限,做一...
  • qq_24672309
  • qq_24672309
  • 2016年04月02日 12:42
  • 13537

Web应用跨域访问及单点登录解决方案汇总

做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。Ajax的跨域访问问题是现有的Aj...
  • huikaichedeyeren
  • huikaichedeyeren
  • 2016年06月02日 11:34
  • 9069

SSO(单点登录)实现机制讲解

引言          单点登录有许多开发商提供解决方案,本文以yale大学SSO开源项目CAS为例,介绍单点登录实现机制。 术语解释 SSO-Single Sign On,单点登录 TG...
  • yan_dk
  • yan_dk
  • 2011年12月22日 14:16
  • 17750

Apache Shiro:Java 认证授权框架 SSO 单点等了解决方案

Shiro简介 Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权。使用 Shiro,您就能够为您的应用程序提供安全性而又无需从头编写所有代码。 Apa...
  • conquer0715
  • conquer0715
  • 2016年04月27日 16:59
  • 6284

SSO单点登录 SpringBoot 项目08 火推

SSO单点登录 登录涉及知识 基于Token模式验证 用户第一次访问,需要提供账号和密码登录;后续可以提供token令牌访问。 用户做每次操作需要携带token,验...
  • qq1350048638
  • qq1350048638
  • 2017年12月29日 17:05
  • 68

基于CAS的单点登录SSO[1]: 搭建CAS单点登录demo

基于CAS的单点登录SSO[1]: 搭建CAS单点登录demo 作者:家辉,日期:2017-08-08 CSDN博客: http://blog.csdn.net/gobitan 摘要:经过对大量第三方...
  • gobitan
  • gobitan
  • 2017年08月28日 22:29
  • 791

单点登录SSO(cookie和ticket)实现

本篇是对项目中用到单点登录的一些总结整理,具体的内容是结合自己找的一篇博客(下面会给大家贴出),主要是用cookie和ticket实现的。 单点登录(Single Sign On),简称为 SSO,...
  • z1729734271
  • z1729734271
  • 2016年09月03日 22:01
  • 5348

javaWeb简单的单点登录sso实现方法

javaWeb简单的单点登录sso实现方法
  • sinat_32430939
  • sinat_32430939
  • 2017年04月17日 22:53
  • 4103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于WEB的 SSO 解决方案
举报原因:
原因补充:

(最多只允许输入30个字)