JAVA单点登录的实现与应用整合中SSO的技术实现

  • 格式:pdf
  • 大小:563.39 KB
  • 文档页数:14

java单点登录的实现在门户项目中,经常会遇到如何实现单点登录的问题,下面就本人的经验做个总结。

欢迎大家进行补充讨论。

单点登录的具体实现有很多种选择,包括:1.采用专门的SSO商业软件:主要有:Netgrity的Siteminder,已经被CA收购。

Novell公司的iChain。

RSA公司的ClearTrust等。

2.采用门户产品供应商自己的SSO产品,如:BEA的WLES,IBM的Tivoli Access Manager,Sun公司的identity Server,Oracle公司的OID等。

3.这些商业软件一般适用于客户对SSO的需求很高,并且企业内部采用COTS软件如:Domino,SAP,Sieble的系统比较多的情况下采用。

并结合身份管理。

统一认证等项目采用。

采用这些软件一般都要对要集成的系统做些改造,如在要集成的系统上安装AGENT。

现在一般只提供常见软件如:Domino,SAP,Sieble,常见应用服务器:weblogic,websphere等的AGENT。

要先统一这些系统的认证。

一般采用LDAP或数据库。

然后才能实现SSO。

比较麻烦。

4.另外,如果不想掏银子,也有OPEN SOURCE的SSO软件可选:主要有:/https:///等。

具体怎么样就不清楚了。

如果项目对SSO的要求比较低,又不想对要被集成的系统做任何改动,可采用下面介绍的方式简单实现:下面我们通过一个例子来说明。

假如一个门户项目要对下面的几个系统做SSO。

用户在这些系统中的用户名,密码各不相同,如:员工号为001的员工在这些系统中的用户名,密码分别如下:用户系统用户名密码001Portal系统A1234001邮件系统B2345001DOMINO系统C AAAA001报销系统D CCCC001工资系统E BBBB首先,建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系首先,要建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系并保存。

可保存在表中或LDAP中或文件系统中。

当然要考虑这些系统之间的数据同步问题。

比较好的方式是找到用户在这些系统中的都存在的唯一信息(如员工号,MAIL地址,姓名等)。

通过唯一信息实时到各个系统中去取认证所需要的信息。

就不需要考虑数据同步问题。

比较实用。

可以建立类似下面的表:密码可采用加密保存。

如果是采用BEA的Weblogic Portal,可采用UUP来保存这些信息。

(uservarchar2(20),app_name varchar2(20),architect varchar2(4),app_company varchar2(50),app_department varchar2(50),app_user varchar2(15),app_passwd varchar2(15),app_cookie varchar2(30),form_user varchar2(20),form_passwd varchar2(20),app_special varchar2(20));通过IFRAME或超连接方式集成目标系统,并进行SSO通过IFRAME或超连接方式集成目标系统,并在URL中带上用户名和密码。

如集成DOMINO可采用如下方式:width=">或:Href src=“http:// host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf”以上采用的是在HTTP中直接传递明码,为提高安全性,可采用HTTPS来传递用户名和密码。

另外采用这种方式被集成的系统必须支持FORM方式认证。

J2EE应用,DOMINO等都支持FORM认证。

这两种方式如果SSO成功,就自动进入目标系统的界面,如果实现会显示目标系统的登录界面。

其效果图如下:这种方式,必须维护对应关系表,如上面的sso_info。

更好的方式是提供界面,让最终用户自己维护这种对应关系,可模仿Compoze portlets for lotus的做法,在用户第一次进入要与之做SSO的系统时,如DOMINO系统,显示一个界面,让用户自己输入他在该系统中的用户名/密码等信息。

并保存到表中或LDAP等其他数据源中。

以后用户要进入这些系统时,就直接从表中或其他数据源中取用户的用户名/密码等信息,帮助用户做认证。

建议采用这种方式。

如下图所示。

如果用户改变了自己在DOMINO系统中的用户名,密码。

从门户系统进入DOMINO系统时,认证会失败,就重新显示类似下面的界面。

让用户重新输入他在DOMINO系统中新的用户名,密码并保存。

以上这种实现方式,一般需要浏览器支持COOKIE,所以要注意浏览器的配置,在开发阶段,为方便调试,可设置IE,让它显示COOKIE的名称。

如下所示:采用这种方式,对要集成的系统不需要做任何的改动。

如果PORTAL系统中的用户在被集成的系统中的权限都一样,可采用建立一个通用用户的做法。

也就是所有在PORTAL系统中的用户都采用这个通用用户进入目标系统。

这种方式等于是采用页面集成方式做集成。

比较方便使用。

另外,有时候需要采用调用API,或配置Adapter等应用集成方式来集成其他系统,一般也是通过定义一个连接专用的用户。

在API中或在配置Adapter的时候写死。

如采用JAVA API方式集成DOMINO:lotus.domino.Session dominoSession=NotesFactory.createSession(dominoServer,“admin”,“password”);CS结构实现方式经常有人问CS结构的应用如何实现SSO,本人的建议是对这种系统不要自己去实现SSO。

很麻烦,其实输个用户名,密码没什么大不了的。

如果要实现,一是采用商业软件。

另外也可以采用以下方式:在PORTAL 的PORTLET上建立超连接。

并通过APPLET方式启动CS结构的应用系统的登录界面。

然后通过如下的方式把用户名/密码传递过去。

-不能做任何改动的客户端-WIN消息(给登录窗口发送用户名,密码等登录所需要的信息),模拟键盘(java有模拟键盘输入的API)-可以做改动的客户端-参数传递,并让登录的EXE文件读取参数进行认证。

因为要让APPLET执行本地的EXE文件,所以必须对IE中的JRE的安全进行设置。

其他:在采用以上方式实现了SSO后,要注意LOGOUT,可采用与LOGIN相同的方式。

也可以通过被集成系统的超时设置来实现。

单点登录SSO技术资料收集∙统一用户认证和单点登录解决方案:计算机世界网上的文章,比较全面的介绍统一用户认证和单点登录解决方案∙惠普灵动单点登录(SSO)解决方案:包括C/S结构的系统单点登录解决方案∙网站用户单点登录系统解决方案:通过令牌方式实现网站用户单点登录∙WebLogic平台的Web SSO(SAML)解决方案:在WebLogic8.1SP4中,提供了用于和Microsoft Windows客户端进行SSO的Single Pass Negotiate Identity AssertionProvider。

本文对其做了详细的介绍。

∙/index.php?blogId=4:收录了一些SSO方面的文章∙应用整合中SSO的技术实现:作者介绍了南京地税进行应用整合SSO的技术实现方案应用整合中SSO的技术实现在税务行业信息化发展的关键阶段,应用整合已经非常重要,而应用整合的表现层首先要实现的就是单点登陆(SSO,Single sign-on的缩写),以下是笔者结合南京地税进行应用整合中SSO的技术实现。

南京地税目前有多种企业应用,包括征管系统、行政系统、辅助决策系统、公文系统、人事系统、电子地图、邮件系统等等,这些应用主要是采用三层体系结构(IE6.0+weblogic portal7.0+weblogic server7.0 +oracle9i)来构架。

所有的用户登陆需要通过weblogic portal进行。

我们在系统中使用SSO来实现用户通过一次认证(authenticate)来存取多个受保护的资源,也就是说,用户随后对受保护资源的存取,将不会导致每一次都要用户提供认证的信息,只需要一次认证即可。

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

(1)、单一的登陆点。

理想的情况是用户通过任何应用系统都能进行SSO,这对于基于Web的系统是可行的。

这种单一的登陆点在整个系统的设计中是唯一认证用户的地方,由登陆点将SSO token(针对不同的C/S,B/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的应用注销。