文章 - 106 评论 - 14 收藏 - 1 粉丝 - 0 访问量 - 95988

1.什么是单点登录(Single SignOn),为什么要SSO

2Portal OA SSO 3Portal 与普通企业及应用集成的SSO

第一部分  什么是单点登录?

一、              概述:Single Sign On (SSO)

严格地说,单点登录指的是允许用户登录到一个应用,这个应用带有经过认证的到其他应用的访问途径,登录到这个应用之后,用户无需再遭遇任何其他的认证。用更实际的话来说,它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。

我们的目标是,SSO 提供登录到汉和 Portal 的能力,并允许使用那些用户凭证访问 Domino 环境、DominoSametimeQuickPlace 以及其他基于 Domino 的工具;允许用户访问自己权限以内的所有企业及应用,即:运行在普通应用程序服务器上的各种业务系统。例如,运行在WebLogic或者Tomcat上的jsp应用程序,运行在IIS上的asp,aspx系统,以及php系统。如果在汉和 Portal和业务系统之间没有 SSO 关系的话,那么用户每次访问某个包含来自于基于业务系统的应用程序或者服务的信息的 portlet 时,都需要登录到业务系统环境中。如果实现了单点登录,那么,一旦用户登录进入Portal系统,该用户就可以在不用再次登录的情况下,访问她所拥有权限的、包括OA和普通企业即应用程序在内的所有业务系统,

Portal与企业级业务系统实现了SSO

二、              SSO的实现

以汉和平台为例,改企业现在存在一下四套业务系统,包括Lotus Notes 开发的OA系统,一套基于WebLogicjsp系统,两套基于IISasp系统,我们就以集成这四套系统为例,简单介绍SSO的实现:

我们将采用如下几种方式实现SSO

1、   统一LDAP验证集成:

 我们将四套业务系统的所有用户信息一起放到LDAP服务器内,由ldap统一对四套系统的用户进行验证。这样做比较有利于用户及权限的管理,但是也存在弊端。如果这四套系统用户信息放在不同平台的不同数据库中,而且这四套系统除OA外,各有不同的用户组群,放在一起反而不利于管理。

2、   基于Portal系统LDAP的凭证保险库法

我们采用Portal系统独立存在的LDAP,由这个LDAP验证Portal系统用户的合法性,一旦验证通过,用户就登录进Portal系统。然后用户在给定权限的各个业务系统Portlet中存储在各个业务系统中的用户信息,Portal系统会统一管理这些信息,然后自动到各个业务系统的用户信息库中校验,一旦通过校验,该portlet就能显示业务系统的授权信息。通常我们是在portlet中放入一个Iframe,用户在Portal系统中通过portlet中的这个Iframe来访问具体业务系统中的授权信息。

3、   基于OA系统LDAP的凭证保险库法:

基本上等同于第二种方法,不过更简单。domino OA系统是企业内部每个人都使用的业务系统,而且它已经有一套成熟的LDAP,我们不必再为Portal创建LDAP服务器,我们可以直接使用OA系统的,所以有点麻烦的是,在使用Portal系统的时候,OA必须是开着的,即使你不使用OA,因为认证的时候是到OALDAP服务其中验证的。其他方面则与第二种方法完全相同。

第二部分、Portal OA SSO

一、              SSO是如何工作的?

Portal Lotus Domino 之间的单点登录是通过一种称为轻量级第三方认证(LTPA)的机制来实现的。WebSphere 应用服务器(还包括 WebSphere Portal 和其他任何运行在 WebSphere 环境中的应用程序)和 Domino 都使用LTPA。当 LTPA 机制用于由多个服务器组成的环境中时,它是通过使用 Domain Cookie 而启用的。这种经过加密的会话 cookie 被放置在用户浏览器中,并包含了一些信息,WebSphere 或者 Domino Application 服务器可以加密这些信息,并使用这些信息来说明用户已经通过该 cookie 所覆盖的DNSDomain Naming Service,域名服务)域中的认证。

LTPA cookie 包含以下信息:

·         Cookie名称:总是设置为 LtpaToken

·         域:设置为 Internet 域,该域由参与单点登录的所有服务器所共享(例如:mycompany.com)。

·         Cookie 到期:设置为当浏览器的寿命终止时删除该 cookie

·         安全:设置为开状态,以强制使用安全套接字层(SSL)。有一个 LTPA 配置有一个设置参数,使它创建只通过 SSL 发送的 cookie

·         Cookie值:这被设置为 LTPA 标记,接下来会对其进行描述。

LTPA标记是一个加密的字符串,它包含以下信息:

·         用户数据:一般被设置为用户 ID,但也可以是任何用于惟一标识用户的用户信息。

·         过期时间:与 Cookie 过期不同,这个字段用于强加一个时间限制,时间限制从登录进来的那一刻算起,而不受浏览器活动或者不活动所影响。这个时间限制是一个可配置的 LTPA 设置,缺省情况下为30分钟。

二、              SSO 的集成效果:

我们可以把整个OA系统作为一个整体,即一个Portlet集成进Portal系统,也可以根据OA内不同的文件数据库(.nsf)俺功能拆分为各个不同的功能单元,每个功能单元作为一个单独的portlet集成进Portal系统

三、              怎样实现OA Portal SSO

   Portal OA SSO可以通过配置ltpa的方法实现。通俗一点讲就是:用户登录Portal后,Portal系统会把用户登录信息加密成ltpa并存放到某一位置,当用户继续访问OA中的授权资源时,OA系统会自动读取改位置的ltpa,读到并解密后拿到OA系统中验证,如果验证通过,则显示给用户他要的授权信息。所以要配置Portal OA 之间的SSO 非常容易,只要先将OA系统服务器的ltpa导出并存为.key文件,然后导入Portal系统所在的服务器(WebShpere Application Server)中就可以了。

第三部分 Portal系统与普通应用程序的SSO

一、              概述

WebSphere Portal 提供了 Credential Vault (凭证保险库)功能。Credential Vault 通过 Basic Authentication Header 将用户名和密码传递给后端应用程序。为了使 Domino 服务器接受通过这个头部传递进来的凭证,必须将服务器会话验证配置为Single-Server 模式。在 Multi-Server 模式中,该服务器将会只接受通过 LTPA 机制传递的凭证。因此,为了与 Domino 应用程序一起使用用于 SSO Credential Vault,您必须将 Domino 服务器会话验证配置为 Single-Server 模式。

要使用 Credential Vault,用户需输入一些凭证,输入一次就够了。随后,这些凭证被存放在一个经过加密的数据库表中,每当用户访问该 portlet 时,这些凭证便被传递给后端应用程序。

二、凭证保险库实现SSO原理  

1.普通业务系统的登录过程:

系统首先提供一个界面让我们输入我们在应用程序中的用户信息  

2.用户输入用户名和密码后,点击登录按钮,该页面提交到form所对应的Actioncheck_login.jsp)处理,我们看check_login.jsp的代码:

 … …

 <%

String username=request.getParamenter(“username”);

 String password=request.getParamenter(“password”);

 ……

 接下来提交到数据库验证用户信息的合法性,如果合法,定位到授权信息页面;否则,重定位回到登录页面login.jsp

%>

3  Portlet开发中是如何解决这个问题的?

其实起关键作用的还是check_login.jsp页面,它需要获得用户名和密码两个键值,然后拿着两个参数到后台数据库去验证。常规登录方式中这两个参数是通过login.jsp来获得的。事实上,只要portlet能为该页面提供这两个键值,也就是先了登录的自动化。而portlet要实现这两个参数的提供是非常简单的,所以实现单点登录也就非常简单了。我们可以复制一个check_login.jsp文件,例如check_portal_login.jsp,这个页面的两个参数是portlet提供的。剩下的事完全交给业务系统去处理,页面流转和全县控制都不用我们管了。

三、开发Portlet实现SSO的方法

1JSP 取值传送URL法。

顾名思义,我们开发一个使用系统专用槽的portlet,使用凭证保险库相关接口在PortletView.jsp中取出用户存储在凭证保险库中的键值,然后以URL的方式传送到Iframe内。例如:

 〉〉〉〉〉〉〉PortletView.jsp中的部分代码:

<%

String userId =viewBean.getUserId();

String password=viewBean.getPassword();

if( userId.length()>0 ) {

String url = http://hostname:8080/check_portal_login.jsp;

url+=”?username="+userId+"&password="+password;

 %>

<Iframe src="<%=url%> " align="left" width=100% frameborder=no marginheight="2" scrolling="auto" marginwidth="2"  height=600></Iframe>

如果用户已经在凭证高先库中存储了键值的话,该portletview页面被初始化时,Iframe中将显示用户成功登录后的授权信息,也就是实现了SSO

2Class 取值写Session法。

 顾名思义,我们在Portlet的控制类中取得用户存储在凭证保险库中的键值对,并在PortletViewdoview()方法中写入Session

 

 

欢迎您访问汉和的网址,了解更多信息:www.hanhe-tech.com,有任何疑问可随时与我们联系。谢谢!

发表于: 2011-02-16 13:58 hanhe 阅读(1245) 评论(0) 收藏 好文推荐

发表评论(网友发言只代表个人观点,不代表本网站观点或立场。)

您尚未登录,请先【登录或注册