http://dev2dev.bea.com.cn/techdoc/20060228739.html
在门户项目中,经常会遇到如何实现单点登录的问题,下面就本人的经验做个总结。欢迎大家进行补充讨论。
单点登录的具体实现有很多种选择,包括:
采用专门的SSO商业软件: 主要有:Netgrity的Siteminder,已经被CA收购。Novell 公司的iChain。RSA公司的ClearTrust等。
采用门户产品供应商自己的SSO产品,如:BEA的WLES,IBM 的Tivoli Access Manager,Sun 公司的identity Server,Oracle公司的OID等。
这些商业软件一般适用于客户对SSO的需求很高,并且企业内部采用COTS软件如:Domino,SAP,Sieble的系统比较多的情况下采用。并结合身份管理。统一认证等项目采用。采用这些软件一般都要对要集成的系统做些改造,如在要集成的系统上安装AGENT。现在一般只提供常见软件如:Domino,SAP,Sieble,常见应用服务器:weblogic,websphere等的AGENT。要先统一这些系统的认证。一般采用LDAP或数据库。然后才能实现SSO。比较麻烦。
另外,如果不想掏银子,也有OPEN SOURCE的SSO软件可选:主要有:http://www.josso.org/ https://opensso.dev.java.net/ http://www.sourceid.org 等。具体怎么样就不清楚了。
如果项目对SSO的要求比较低,又不想对要被集成的系统做任何改动,可采用下面介绍的方式简单实现:下面我们通过一个例子来说明。假如一个门户项目要对下面的几个系统做SSO。
用户在这些系统中的用户名,密码各不相同,如:员工号为001的员工在这些系统中的用户名,密码分别如下:
用户 系统 用户名 密码
001 Portal系统 A 1234
001 邮件系统 B 2345
001 DOMINO系统 C AAAA
001 报销系统 D CCCC
001 工资系统 E BBBB
首先,建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系
首先,要建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系并保存。可保存在表中或LDAP中或文件系统中。当然要考虑这些系统之间的数据同步问题。比较好的方式是找到用户在这些系统中的都存在的唯一信息(如员工号,MAIL地址,姓名等)。通过唯一信息实时到各个系统中去取认证所需要的信息。就不需要考虑数据同步问题。比较实用。可以建立类似下面的表:密码可采用加密保存。如果是采用BEA的Weblogic Portal,可采用UUP来保存这些信息。
(
user varchar2(20), /*用户名*/
app_name varchar2(20), /*应用系统*/
architect varchar2(4), /*应用系统的架构BS或CS*/
app_company varchar2(50), /*用户所属分公司*/
app_department varchar2(50), /*用户所在的部门*/
app_user varchar2(15), /*在该系统中的用户名*/
app_passwd varchar2(15), /*在该系统中的密码*/
app_cookie varchar2(30), /*COOKIE名称*/
form_user varchar2(20), /*认证页面中FORM的用户名字段*/
form_passwd varchar2(20), /*认证页面中FORM的密码字段*/
app_special varchar2(20) /*其他*/
);
通过IFRAME或超连接方式集成目标系统,并进行SSO
通过IFRAME或超连接方式集成目标系统,并在URL中带上用户名和密码。如集成DOMINO可采用如下方式:
<IFRAME src=http://host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
width="100%" frameborder="0" align="middle" height="100%" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
</IFRAME>
或:
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)解决方案: 在WebLogic 8.1SP4中,提供了用于和Microsoft Windows客户端进行SSO的Single Pass Negotiate Identity Assertion Provider。本文对其做了详细的介绍。
http://blog.beijingnet.com/index.php?blogId=4: 收录了一些SSO方面的文章
应用整合中SSO的技术实现: 作者介绍了南京地税进行应用整合SSO的技术实现方案
分享到:
- 2008-06-27 17:19
- 浏览 1899
- 评论(2)
- 论坛回复 / 浏览 (1 / 3901)
- 查看更多
相关推荐
单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证的机制,允许用户在一次登录后,访问多个相互信任的应用系统而无需再次进行身份验证。本源码包提供了SSO的简单实现,适用于学习和理解SSO的基本原理与...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这个过程提高了用户体验,同时也简化了安全管理。在本文中,我们将探讨SSO的基本原理...
### 单点登录原理与简单实现 #### 一、单系统登录机制 ##### 1. HTTP无状态协议 - **HTTP特性**:HTTP是HyperText Transfer Protocol(超文本传输协议)的缩写,是一种用于从Web服务器传输超文本到本地浏览器的...
【标题】:“Iframe+Cookie实现简单的单点登录” 单点登录(Single Sign-On,SSO)是一种身份验证机制,允许用户在多个相互关联的应用系统中登录一次,然后在整个会话期间无需再次输入凭证即可访问这些系统。在本文...
Kisso的这种设计使得分布式服务部署、单点登录跨域访问等问题变得简单,而使用session则需要复杂的session复制机制和其他解决方案,实现起来更加困难。 JEECG智能开发平台v3的开发指南详细说明了如何集成Kisso实现...
利用springMvc 实现的简单的单点登录Demo,内含三个小Mavn项目分别是 1、认证中心SSOServer 2、子系统1SSOClient1 3、子系统2SSOClient2 文章请参考 http://blog.csdn.net/qq_31183297/article/details/79419222
cas 单点登录解决方案的技术实现机制其实是比较简单的。使用 cas 单点登录解决方案,用户只需要登录一次就可以进入多个系统,而不需要重新登录。这不仅仅带来了更好的用户体验,更重要的是降低了安全的风险和管理的...
本教程将指导你如何使用J2EE技术,特别是Servlet、JSP以及Filter,来简单实现一个Web单点登录系统。 首先,我们要理解SSO的工作原理。SSO的核心是共享用户认证信息。当用户在系统A中登录后,系统会生成一个安全的...
本文对单点登录(SSO)技术进行了详细的讨论,从理论到实践,介绍了SSO的概念、分类、优点和实现方法,并结合Web Service提供了一个简单的单点登录技术的实现。 单点登录(SSO)是一种认证和授权机制,允许注册用户...
在本文中,我们将探讨如何实现OpenMeetings的简单单点登录(SSO,Single Sign-On),即自动登录功能。 单点登录允许用户在一个系统中登录后,无需再次输入凭证即可访问其他相互信任的系统。在OpenMeetings中实现这...
总的来说,单点登录的实现取决于项目的需求、预算和技术背景。无论是采用成熟的商业软件,还是自定义开发,关键是确保安全、高效地提供用户认证,同时简化后台管理。对于开发者而言,理解SSO的工作原理,选择合适的...
"CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在多个相互关联的应用系统中只需要登录一次,即可访问所有系统,而无需再次输入凭证。这种技术在现代企业环境中非常常见,因为它提供了便捷的用户体验并...
该资源是springsecurity+oauth2+jwt实现的单点登录demo,模式为授权码模式,实现自定义登录页面和自定义授权页面。应用数据存在内存中或者存在数据库中(附带数据库表结构),token存储分为数据库或者Redis。demo...
在这个“单点登录的demo(使用cookie+filter实现)”中,我们将深入探讨如何利用Cookie和Filter技术来实现一个简单的SSO系统。 **一、Cookie基础** Cookie是Web服务器存储在用户浏览器上的一小段数据,用于在用户与...
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 本示例简单的实现了SSO认证系统,...
在提供的压缩包"最新java实现简单的单点登录.doc"中,可能包含了关于如何使用Java Web和Spring Security实现SSO的具体步骤、配置代码示例和常见问题解答等内容。读者可以通过阅读这份文档,进一步了解和学习如何在...
单点登录的工作原理可以通过一个简单的类比来理解:假设一个大型公园内有多个独立的景点,游客可以在各个景点入口分别购票,但这种方式非常不便。因此,大多数游客会选择在公园入口处购买一张通用门票(通票或套票)...