SSO的简单实现

摘要:
如果项目对SSO的要求很低,并且不想对要集成的系统进行任何更改,那么可以通过以下方式简单地实现:让我们用一个示例来说明。如果SSO以这两种方式成功,将自动进入目标系统的界面。如果实现,将显示目标系统的登录界面。例如,JAVAAPI用于集成DOMINO:lotus。多米诺骨牌。SessiondominoSession=备注工厂创建会话;CS结构的实现经常被问及CS结构的应用如何实现SSO。我的建议是不为该系统实现SSO。
在门户项目中,经常会遇到如何实现单点登录的问题,下面就本人的经验做个总结。欢迎大家进行补充讨论。

单点登录的具体实现有很多种选择,包括:

  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软件可选:主要有:http://www.josso.org/https://opensso.dev.java.net/http://www.sourceid.org/ 等。具体怎么样就不清楚了。

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

图一

  用户在这些系统中的用户名,密码各不相同,如:员工号为001的员工在这些系统中的用户名,密码分别如下:

用户系统用户名密码
001Portal系统A1234
001邮件系统B2345
001DOMINO系统CAAAA
001报销系统DCCCC
001工资系统EBBBB

首先,建立员工在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
frameborder="0" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
</IFRAME>

  或:
Href src=“http://localhost/names.nsf?Login&Username=admin&Password=password&RedirectTo=/names.nsfhost1/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的安全进行设置。

对IE中的JRE的安全进行设置

其他:

  在采用以上方式实现了SSO后,要注意LOGOUT,可采用与LOGIN相同的方式。也可以通过被集成系统的超时设置来实现。

免责声明:文章转载自《SSO的简单实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shell实现大批量word转码然后分析相关字段Learn 1-1 刻意练习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mstsc命令详解

1: 在xp sp2中用mstsc /console命令可以登录到远程桌面的控制台(和在电脑前以同一用户登录),xp升级到sp3后,不能这样用了。sp3中命令应该换成mstsc /admin。 2: xp sp3中mstsc的参数如下: 3: MSTSC [] [/v:] [/admin] [/f[ullscreen]] [/w:...

ACCESS_REFUSED

问题描述:FatalListenerStartupException: Authentication failure 问题原因:连接RabbitMQ服务器异常,要么是用户名和密码错误,要么是使用的用户名没有权限登录,比如用guest用户 问题解决: 1、使用正确的用户名和密码 2、重新创建一个用户名和密码 网络上的解决方案: https://www.rab...

浅谈架构之路:单点登录 SSO

前言:SSO 单点登录   “半吊子”的全栈工程师又来了,技术类的文章才发表了两篇,本来想先将主攻的几个系列都开个头(Nodejs、Java、前端、架构、全栈等等),无奈博客起步太晚,写博文的时间又没有很多,只好不按顺序乱发一通,请大家见谅。   本篇文章介绍一下单点登录,不像上一篇博文介绍的前后端分离,SSO 并不能算是一种架构吧,只能说是一个解决方案...

PLSQL操作Oracle创建用户和表(含创建用户名和密码)

转载于https://blog.csdn.net/cs6480012/article/details/80771115 事实证明,只有自己写了才会是自己的,这才不会丢,万一转载的内容有一天删了呢,你们说是吧? 1》打开PLSQL,填写用户名和密码(初始有两个用户sys和system,密码是自己安装oracle数据库时定的),Database选择ORCL(默...

设置Tomcat管理员用户名和密码

http://dove19900520.iteye.com/blog/1774980   今天tomcat出点问题,然后我就想进入tomcat manager看看,结果怎么输入密码都不行,后来网上查了查才找到配置管理员用户名和密码的正确方式,在此记录一下:     要想配置管理员用户名和密码,需要修改tomcat安装文件下的conf中的tomcat-use...

SourceTree修改用户名和邮件

1、设置--》高级--》取消选中[使用全局用户设置]--》输入全名,电子邮件地址--》确定 2、SourceTree--》偏好设置--》通用--》输入默认用户信息 3、SourceTree--》偏好设置--》网络--》修改主机名称对应的用户名 修改成功后需有新的提交过程,此时提交记录才会更新用户信息,以往未修改时仍展示默认信息...