logo资料库

SSO的简单实现SSO的简单实现.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
单点登录的具体实现有很多种选择,包括:
首先,建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系
通过IFRAME或超连接方式集成目标系统,并进行SSO
CS结构实现方式
其他:
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 的员工在这些系统中的用 户名,密码分别如下: 用户 系统 用户名 密码 001 001 001 001 001 Portal 系统 邮件系统 DOMINO 系统 报销系统 工资系统 A B C D E 1234 2345 AAAA CCCC 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 可采用如下方式: 或: Href src=“http://localhost/names.nsf?Login&Username=admin&Password=password& RedirectTo=/names.nsfhost1/names.nsf?Login&Username=admin&Password=pas s&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 相同的方式。也可以 通过被集成系统的超时设置来实现。
分享到:
收藏