WebSphere环境下的SSO(Single sign-on:单点登录、全网漫游)实现之: 二 SSO(Single Sign-On)实现步骤

SSO的实现涉及到企业应用的开发和服务器的配置两部分,接下来,作者将一步一步的演示如何实现WebSphere服务器之间的SSO,希望能够对大家有所帮助。本文的上篇 SSO实现技术准备 对WebSphere环境下的SSO(Single sign-on:单点登录、全网漫游)的相关机制和概念做了详细的介绍。

1 软硬件环境

在本演示环境中,采用了两台配置有WebSphere服务器的主机,他们属于同一个DNS域,具体的配置参数如下:

DNS域--chinacreator.com 
LDAP数据库地址-- b.chinacreator.com:389

指标 机器1 机器2
主机域名 a.chinacreator.com b.chinacreator.com
操作系统 Windows 2000 server Windows 2000 server
WebSphere WAS AE 4.0+补丁4.0.6 WAS AE 4.0+补丁4.0.6
LDAP(目录数据库)   IBM SecureWay Directory

2 使用WSAD开发增加了安全特征的web 应用

我们设计一个web应用,它包含一个securityfold文件,我们定义一个安全角色admin_role,只允许是admin_role角色的用户访问securityfold文件夹下面的文件,下面是详细操作步骤:

1. 打开WSAD(我用的是WSAD4英文版),建立一个新的web应用: 
企业应用名:SecurityWebSource 
WEB应用名:sso

2. 分别建立三个。html文件,一个是login.html,一个是error.html,还一个是logout.html

A. login.html

login.html文件用作网络用户身份认证的登录界面,根据J2EE的规定,这个登录页面有一些具体的规定:

  1. 必须包括一个form元素,form的action属性必须是j_security_check,j_security_check是J2EE中专门处理用户登录的一个小应用程序(Servlet)
  2. form中必须包括两个文本框,一个名为:j_username,另外一个是:j_password,这两个文本框的名字不能更改。
  3. 其他的页面元素可以随意定制以满足客户个性化、风格化的需求

B. error.html

error.html用于在网络用户身份认证失败的时候给客户提示错误信息,你可以随意定制。 
[注] 这两个文件的名字并不重要,因为我们可以在配置文件中进行设定。

C. logout.html

允许用户从系统中注销,这个功能不是J2EE中的标准实现,而是WebSphere中给出的一个辅助功能,它不需要在web应用描述文件(web.xml)中作任何定义,而是一个简单的.html文件。

  1. 这个文件中需要包含一个form元素,form的action固定为ibm_security_logout,这是WebSphere中提供注销功能的小应用程序(Servlet)
  2. form中包括一个隐含文本框,它的名字是:logoutExitPage,值一般设置为登录页面,我们这里是/login.html

[注]这三个文件的源代码大家可以在示例文件中找到。


3. 继续其他操作,完成您的web应用,在作者的例子中,为了说明方便,在根目录下建立了securityfold子目录,然后在securityfold下面建立了helloworld.jsp,整个web应用的文件结构如下图:

4. 给这个web应用设置为需要安全控制,这需要修改web.xml的属性。

在WSAD中打开web.xml文件,切换到pages标签页,修改其中的属性如下:

realm name - 安全域名字 
这是我们安全域的一个标识名字而已,并不重要,我的设置是:security my web

authortication method-认证方式 
J2EE中提供了几种认证方式,常用的有基于form登录方式的认证方式和基于安全证书的认证方式,基于form的认证只需要用户输入用户名和密码,比较易于实现,所以作者的例子中使用了基于form登录方式的认证方式,所以在下拉框中选择form.

Login page - 用户没有认证就访问受保护的资源时弹出的登录页面 
也就是我们在前面建立的login.html,如果你在创建时选择了别的名字,请改为你设置的名字。

Error page--网络用户使用错误信息登录系统时的错误提示页面 
也就是我们在前面建立的error.html,如果你在创建时选择了别的名字,请改为你设置的名字

5. 给web应用增加角色

在WSAD中打开web.xml文件,切换到security标签页。

A. 增加一个安全角色admin_role 
B. 增加一个安全约束(security-constraint) 
C. 给这个安全约束增加它可以访问的网络资源 
可以访问的网络资源有两方面,一是可以访问的方法,而是可以访问的文件。 
可以访问的方法包括Post,Get等。 
可以访问的文件包括一个确定的文件或者一个文件夹: 

  1. 指定一个确定的文件(比如:/securityfold/helloworld.jsp)
  2. 指定一个可以访问的目录(比如:要设置这个安全约束可以访问securityfold下面的所有文件,那么应该在url-patterns输入/securityfold/*)。


D. 给这个安全约束增加安全角色可以选择将自己定义的安全角色加入到这个安全约束中来,就是说只有属于指定的安全角色的用户才可以访问这个安全约束中规定的资源。

6. 将整个应用打包成.EAR文件

这样,我们的企业应用的开发就完成了。

3 LDAP服务器的配置

为了配置WebSphere的安全配置和测试的需要,我们需要用到LDAP数据库,在我的LDAP数据库中,我建立了2个根,分别是cn=root和cn=sso,其中cn=root下面建立一个admin用户用于启动管理控制台的安全认证,cn=sso目录下面建立了一个administrators用户和我们的应用中安全角色进行绑定。

4 WebSphere服务器端的配置

由于WebSphere服务器默认不支持SSO,所以我们需要自己配置服务器的特性,是服务器支持SSO,下面将演示SSO配置的详细过程。

1. 确保您已经安装了WebSphere服务器4.0版本,最好是高级版(Advanced Edition)

2. 下载WebSphere的补丁,将WebSphere升级到4.0.6版本

3. 启动服务器,启动管理控制台

4. 单击管理控制台->安全性中心,在常规标签页中选中"启用SSO"前面的复选框,其他设置可以根据自己需要修改。

5. 切换到认证标签页

i. 选中轻量级第三方认证(LPTA),表示我们使用LPTA安全认证机制,因为SSO不支持基于本地操作系统的用户认证机制,所以我们只能选择这个选项。

ii. 选中"启用单次注册"左边的复选框,在"域"后面的文本框中输入你要用的到dns域,比如我的机器的名字是b.chinacreator.com,那么这里应该输入chinacreator.com。

iii. 选择启用web信任关联。

iv. 如果是配置所有webpshere服务器中的第一台服务器,那么我们需要单击"生成密钥",在弹出的提示框中输入用户名和密码。 
如果不是配置第一台服务器,那么请单击"导入密钥",选择从第一台服务器中倒出的密钥文件,将已经生成的密钥导入进来。

v. 选中LDAP左边的单选框,表示使用LDAP数据库作为用户注册库,如果是WebSphere和WebSphere之间的SSO,我们还可以选择自己实现注册库,如果需要实现WebSphere和Domino之间的SSO,则只能选择LDAP数据库作为用户注册库,因为Domino不支持用户自己实现的注册库。

vi. 安全性服务器标识是指管理域的管理用户名 
这里需要使用LDAP数据库中存在的一个用户,而且需要使用它的uid字段对应的信息,请不要使用cn=xxx之类的用户名,您一定要记住这个用户信息,配置完成后,下次启动管理控制台的时候需要输入这个用户信息。根据我们LDAP数据库的设置,后面的文本框中"admin"

vii. 安全性服务器密码是和上面的用户名对应的密码

viii. 主机是LDAP的机器名,我们这里是b.chinacreator.com

[注] 最好不要使用主机的ip地址。

ix. 端口是LDAP服务器的端口,默认是389

x. 基本专有名称是指我们可以绑定用户的根目录,在我们的演示实例中,所有的网络用户信息都存放在cn=sso根目录下,所以这里输入cn=sso.

xi. 绑定专有名称和绑定密码是指可以搜索LDAP的用户信息的用户的DN信息和密码,一般可以不填写,因为LDAP数据库默认所有的用户都拥有这个权限,除非LDAP中增加了另外的限制条件。

xii. 单击"确定"按钮结束WebSphere服务器安全性的配置

xiii. 重起服务器使安全定义生效 

如果需要配置另外的WebSphere服务器,请按照上面的步骤进行设置。

5 web应用的安装

现在我们需要将我们开发的需要安全特性的web应用安装到webspher服务器上。

1. 打开a.chinacreator.com机器上的管理控制台

2. 选择企业应用程序,单击右键,选择安装企业应用程序

3. 单击浏览,选择我们前面已经导出的securitysso.ear,单击下一步

4. 单击选择,选择所有已认证用户 
这里有3种选择,可以多选,如果选择所有用户,那么说明这个角色就是对应所有用户,不管它是否已经登录。如果选择已认证用户,那么这个角色对应cn=sso下面的所有用户,只要它输入了正确的用户名和密码,那么它就成了这个角色,还可以选择指定的用户名和组。

5. 一直单击下一步直到应用被安装到服务器上

6. 启动我们刚才安装的企业应用 
重复1~7步骤,将这个应也安装到b.chinacreator.com上。

6 验证SSO

1. 验证web应用的安全特性是否发挥作用 
在浏览其中输入 http://b.chinacreator.com:9080/sso/securityfold/helloworld.jsp,理想的情况是浏览器中将出现登录界面,输入cn=sso下面的任何一个用户的用户名和密码,系统将自动重定向到helloworld.jsp页面上,这说明我们的web应用中的安全特性已经发挥作用了

2. 验证SSO 
接下来我们在浏览器中输入 http://a.chinacreator.com:9080/sso/securityfold/helloworld.jsp,理想的情况应该是我们可以直接看到该页面,而不需要重新输入登录信息进行认证。

如果没有出现理想中的情况,那么请参考IBM WebSphere信息中心中安全部分的5.8.4章节"讨嫌的SSO配置问题"。

7 结束语

在本文中,作者用一个实例演示了如何实现两台处于同一个DNS域下面的WebSphere服务器之间的SSO,并且详细地解释了实现过程中需要注意的关键点和特殊要求。

在配置过程中,作者碰到了一个问题还没有解决,就是映射用户的时候,不能选择LDAP数据库中存在的用户组(参见5.5节的第4步),作者将继续研究,争取能够解决,如果各位解决了这个问题,也烦请各位通知一下作者。整个演示实例在作者的测试环境中通过,如果读者SSO配置过程中碰到了什么困难或者疑问,可以和作者进行交流。

工具下载:

1. WebSphere4.0.6补丁下载地址: 
单机版升级补丁下载地址 
ftp://ftp.software.ibm.com/software/WebSphere/appserv/support/fixpacks/was40/fixpack6/Windows/was40_aes_ptf_6.zip 
高级版升级补丁下载地址: 
ftp://ftp.software.ibm.com/software/WebSphere/appserv/support/fixpacks/was40/fixpack6/Windows/was40_ae_ptf_6.zip


参考资料

1. sun 的Java ACC规范http://java.sun.com/j2ee/javaacc/

2. sun 的 JAAS规范http://java.sun.com/products/jaas/

3. opengroup 的安全实现部分http://www.opengroup.org/security/

4. ibm 的《LDAP入门》教程

5. IBM WebSphere文档中心安全部分 http://www-3.ibm.com/software/webservers/appserv/doc/v40/ae/infocenter/was/pdf/nav_Securityguide.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值