配置 Websphere Studio 以使用 Tivoli Access Manager 和 JAAS
引言
用于电子商务的 IBM® Tivoli® Access Manager(以下称为 Access Manager)是一个企业范围的安全性解决方案。它提供了端到端的安全性,包括单点登录、基于 Web 的分布式管理和基于策略的安全性。它还提供了 Java™ 认证和授权服务(Java™ Authentication and Authorization Service,JAAS)API 的取出即可用(out-of-the-box)的实现,JAAS API 现在是标准的 J2EE 安全性 API。Java 开发人员可以对标准的 JAAS API 进行编码,并仍然利用 Access Manager 的中央安全性资源库的功能。
本文向您说明了如何设置 Websphere Studio 开发环境以使用 Access Manager 的 JASS 实现。这些说明对于任何 Java 运行时(如 Websphere® Application Server)都是适用的。本文给出了样本代码,以说明通过 JAAS 从定制 Java 代码到 Access Manager 调用的简单授权。
假设和预配置
本文假设 Websphere Studio 已安装到了 C:\WSAD 目录中。如果安装到了另一个目录,那么需要更改到这个给定的目录。
本文假定您的 Access Manager 服务器已被恰当地安装与配置。它可以与 WebSphere Studio 在同一台机器上,也可以在不同的机器上。如果它们安装在同一台机器上,那么可以跳过第 2 步,但是请确保您已安装了 Java 运行时。
第 8 步是可选的,这一步假定您已经安装与配置了 Access Manager WebSEAL 服务器。如果没有安装与配置 Access Manager WebSEAL 服务器,那么您可以跳过这一步 - 您将仍然能够通过 JAAS 使用 Access Manager 进行认证和授权,只是不具有 WebSEAL 提供的 Web 单点登录而已。
所使用的产品版本
Websphere Studio Application Developer V4.01
Tivoli Access Manager V3.9
这些说明应当能在 Tivoli Access Manager 的任何版本以及任何基于 WebSphere Application Server 4.x 的 WebSphere Studio 测试服务器上使用。
1. 选择要配置的 JRE
您必须选择一个特别的 Java 运行时环境(Java runtime environment,JRE)来使用 JAAS 并连接到 Access Manager 服务器。本文假定您将配置 Websphere Studio 测试服务器。但是对于任何 JRE,您都可以遵循相同的步骤 - 仅仅将路径替换为那个 JRE 的路径即可。
Websphere Studio 测试服务器的 JRE 位于以下目录中:C:\WSAD\plugins\com.ibm.etools.server.jdk\jre
2. 安装 Access Manager 运行时和 Java 运行时
从 Tivoli Access Manager CD 安装 IBM SecureWay Directory 3.2.2 客户机。请确保只安装客户机,除非您为了一些其他目的计划在开发机器上运行 LDAP 服务器。请安装到 C:\IBM\LDAP 目录下
请再用 Tivoli Access Manager CD 安装 Access Manager 运行时和 Java 运行时组件。请安装到 C:\IBM\Tivoli\PolicyDirector 目录
3. 定制并运行配置批处理文件
向文件 C:\IBM\Tivoli\PolicyDirector\PD\sbin\pdjrtecfg.bat 添加粗体部分,对它进行修改:
. . .
"C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\bin\java" -Djava.ext.dirs -Dpd.home="%PD_HOME%"
-cp "%PDJ_CLASSPATH%" com.tivoli.pd.jcfg.PDJrteCfg %1 %2 %3 %4 %5 %6 %7 %8 %9
将这个文件保存为 sbin 目录下的 pdjrtecfg.wsad.bat
从命令提示符切换到 sbin 目录,然后运行以下命令:
pdjrtecfg.wsad.bat -action config -java_home C:\WSAD\plugins\com.ibm.etools.server.jdk\jre
如果这个批处理命令执行成功,您可能得不到响应,或者得到一条说“已创建了 PolicyDirector”的消息。这个命令应当还将 PD.jar 文件和 jaas.jar 文件复制到 C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\lib\ext 目录中。因此现在您可以将这些文件添加到任何引用 JAAS 类或 Access Manager 类的 WebSphere Studio 项目的构建目录中了 - 使用 SERVER_JDK 类路径变量并展开。
4. 运行 Java SvrSslCfg 配置程序
从命令提示符运行以下命令(所有命令都在一行中):
"C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\bin\java" com.tivoli.mts.SvrSslCfg pdwsad
sec_master password policy-server hostname authorization-server hostname 7135 7136
其中:
sec_master password 是 Access Manager 管理员用户的密码,即 sec_master.
policy-server hostname 是安装 Access Manager 策略服务器的主机名称(如果按第 2 步那样本地安装,那么它便是您的本地机器的主机名称。)
policy-server hostname 安装 Access Manager 授权服务器的主机名称(如果按第 2 步那样本地安装,那么便是您的本地机器的主机名称。)
pdwsad 是将在 Access Manager 中定义的新服务器节点的名称(如果愿意,您可以选择一个不同的名称)。
7135 和 7136 分别是 Access Manager 策略服务器和授权服务器的端口 - 如果您的服务器不使用这些缺省的端口,可以替换它们。
如果这个命令执行成功,您应当得不到响应。
5. 修改 java.security 文件
打开 WebSphere Studio 测试服务器的 java.security 文件:
C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\lib\security\java.security
在该文件底部添加以下几行:
# JAAS login configuration file location
login.config.url.1=file:${java.home}/lib/security/config.pd
# JAAS authorization policy file location
auth.policy.url.1=file:${java.home}/lib/security/jaas.policy
6. 修改 java.policy 文件
向 C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\lib\security 目录中的 java.policy 文件添加以下几行:
// for JAAS and TAM we must grant the following permissions:
grant {
permission javax.security.auth.AuthPermission "createLoginContext";
permission javax.security.auth.AuthPermission "doAs";
permission javax.security.auth.AuthPermission "doAsPrivileged";
permission javax.security.auth.AuthPermission "modifyPrincipals";
permission javax.security.auth.AuthPermission "getSubject";
permission javax.security.auth.AuthPermission "createPDPrincipal";
};
7. 添加 jaas.policy 文件和 config.pd 文件
在 C:\WSAD\plugins\com.ibm.etools.server.jdk\jre\lib\security 目录中创建以下文件:
config.pd
//// config.pd: Login configuration file for PDLoginModule
pd-debug {
com.tivoli.mts.PDLoginModule required debug=true;
};
pd {
com.tivoli.mts.PDLoginModule required;
};
pd-nopass {
com.tivoli.mts.PDLoginModule required nameOnly=true;
};
jaas.policy
grant Principal com.tivoli.mts.PDPrincipal "*" {
permission com.tivoli.mts.PDPermission "ignoreme","a";
};
使用 pd-debug 登录配置以在运行时期间启用 Access Manager 认证的额外的跟踪。您现在应当可以对 Access Manager 服务器进行 JAAS 认证和授权,所有认证和授权都在 WebSphere Studio 测试环境内部进行。欲了解更多有关用 JAAS 进行开发的信息,请参阅下面的参考。
8. 为 WebSphere Studio 测试环境添加 WebSEAL 结点(可选)
只有在您想 Java 代码集成在 Access Manager WebSEAL 中时才需要做这一步,Access Manager WebSEAL 是一个逆向代理服务器,它支持单点登录,提高了安全性并使安全性更好管理。
在 WebSEAL 服务器上启动 Administration 命令提示符(pdadmin)并运行以下命令以创建一个到运行在 8080 端口上的 WebSphere Studio 测试服务器的结点。在一行中输入单独的命令并让命令提示符按需要滚动。
pdadmin> server task webseald-webseal hostname create -t tcp -h {wsad hostname}
-p 8080 -j -w -i -c iv-user /wsadXXX
pdadmin> server task webseald-webseal hostname show /wsadXXX
其中:
用 WebSEAL 服务器的主机名替换 webseal hostname。
用 WebSphere Studio 工作站的主机名替换 wsad hostname。
用您的工作站标识(如您的姓名、一个唯一的数字或您的主机名称)替换 XXX。
现在,如果您请求以下 URL,实际上就是您将经过 WebSEAL 到达在 8080 端口上的 WebSphere Studio 测试服务器:
https://{webseal-hostname}/wsadXXX
--------------------------------------------------------------------------------
如何运行样本代码
您可以下载样本代码,如下所示。这些代码提供了使用 JAAS API 调用 Tivoli Access Manager 的示例。欲完全了解发生的情况,请通读 JSP 和 Java 代码,通篇都带有注释。
将样本代码安装到 WebSphere Studio 中
创建一个名为 JAAS-SampleWeb 的 Web 新项目。然后将 JAAS-SampleWeb.war 文件导入到这个项目中。要确保您的 Web 项目被配置为一个 EAR 项目的模块。
创建 Access Manager 样本对象
为了运行样本代码,必须首先在 Access Manager 中创建一些样本对象,如 用户、小组和受保护资源。
启动 pdadmin 命令行(它在 Windows 启动菜单中称为“管理命令提示符(Administration command prompt)”)。在以 sec_master 登录后 - 运行以下脚本 - 复制并粘贴好。两个用户的密码都为 passw0rd(用零代替“o”)。
################################################
# Access Manager Configuration for JAAS Sample #
################################################
#Run these commands from the pdadmin command line.
#Note: login as sec_master before running these commands.
#create object space and protected resources
objectspace create /MyApp "Protected objectspace for JAAS sample." 0
object create /MyApp/MyProtectedResource "Protected resource for JAAS Sample" 0
#create sampleAdmins group
#NOTE: depending on your LDAP setup, you may have to change the distinguished name used below
group create sampleAdmins cn=sampleAdmins,cn=groups,dc=ibm,dc=com sampleAdmins
#create user arthur -- you could copy and change user name if you want to add more users
#NOTE: depending on your LDAP setup, you may have to change the distinguished name used below
user create arthur uid=arthur,cn=users,dc=ibm,dc=com arthur Arthur passw0rd
user modify arthur account-valid yes
#add user arthur to sampleAdmins group
group modify sampleAdmins add arthur
#create user igor, but don't add him to sampleAdmins group
#NOTE: depending on your LDAP setup, you may have to change the distinguished name used below
user create igor uid=igor,cn=users,dc=ibm,dc=com igor Igor passw0rd
user modify igor account-valid yes
#create sample_ACL
acl create sample_ACL
acl modify sample_ACL set group sampleAdmins Trx
acl modify sample_ACL set description "Default ACL for JAAS sample."
#attach sample_ACL to protected resource object
acl attach /MyApp/MyProtectedResource sample_ACL
运行这个样本
在 WebSphere Studio 中配置和启动 WebSphere Test Server。请确保已经将 EAR 项目添加到了这台服务器。然后只需单击下面的 URL 即可,这些 URL 将以不同的方式调用测试 JSP:
A. 不使用密码进行测试,用户 Arthur
http://localhost:8080/JAAS-SampleWeb/SecurityHandlerTest.jsp?user=arthur&pwdRequired=no&resource=/MyApp/MyProtectedResource
测试成功,因为 Arthur 是 sampleadmins 组的一部分,这个组对指定的受保护资源有 r(读)访问权限。
图 1. 授权成功。
B. 不使用密码进行测试,用户 Igor
http://localhost:8080/JAAS-SampleWeb/SecurityHandlerTest.jsp?user=igor&pwdRequired=no&resource=/MyApp/MyProtectedResource
授权失败,因为 Igor 不是 sampleadmins 组的成员。
图 2. 授权失败。
C. 使用密码进行测试,用户为 Arthur,密码为 badpwd
http://localhost:8080/JAAS-SampleWeb/SecurityHandlerTest.jsp?user=arthur&pass=badpwd&pwdRequired=yes&resource=/MyApp/MyProtectedResource
这一次,认证失败了,因为密码不正确。
图 3. 认证失败:错误密码。
D. 使用密码进行测试,用户为 Arthur,密码为 passw0rd
http://localhost:8080/JAAS-SampleWeb/SecurityHandlerTest.jsp?user=arthur&pass=passw0rd&pwdRequired=yes&resource=/MyApp/MyProtectedResource
现在,认证成功了,因为密码正确,并且授权也成功了,因为 Arthur 是 sampleadmins 组的成员。
图 4. 认证与授权都成功。
禁用 Arthur 的帐户并查看结果
现在,请试着在 pdadmin 命令行运行以下命令:user modify arthur account-valid no。然后执行上面的实例 D 中的 URL。您应当得到一个 AccountExpired 异常:
图 5. 帐户无效。
结束语
本文描述了设置 Websphere Studio 开发环境以使用 Tivoli Access Manager 的 JAAS 实现的过程。您可以使用这些步骤来设置任何的 Java 运行时环境,如开发服务器或生产服务器。您现在应当可以编写通过其 JAAS API 的实现与 Access Manager 进行对话的 Java 应用程序了。
|