IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere | Tivoli  >

使用 IBM Tivoli Directory 将 LDAP 部署到 Websphere Community Edition 中

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

Krishnakumar Balachandar (krishnakumarb@in.ibm.com), 软件工程师,WebSphere Application Server Community Edition Support Team, IBM 

2006 年 5 月 23 日

了解如何使用 IBM® Tivoli® Directory Server 配置 LDAP 领域,从而实现 WebSphere® Application Server Community Edition 的用户身份验证和授权。

引言

IBM WebSphere Application Server Community Edition 是基于 Apache Geronimo 的 Java® 2 Platform Enterprise Edition (J2EE) 应用程序。本文将介绍如何将 IBM Tivoli Directory Server V 6.0(以下称为 Directory Server)和 IBM WebSphere Community Edition 1.0.1(以下称为 Community Edition)一起使用,以进行用户身份验证和授权。本文的目标读者是希望使用 Directory Server 为其即将部署到 Community Edition 中的应用程序配置 LDAP 领域的 J2EE 应用程序开发人员。

应用服务器在基于文件、数据库、LDAP 或其他自定义注册中心的存储库中存储凭据。LDAP 存储库可以存储与用户相关的静态信息,可供整个企业中的所有应用程序使用。本文演示了如何使用 Directory Server 在 Community Edition 中配置 LDAP 领域。我们还将部署一个使用 Directory Server 中的 LDAP 项的示例应用程序。





回页首


关于 LDAP 记录

可以使用 LDAP 来存储各种用户信息,如 ID、地址、电话号码、角色和密码。这些数据组织为树形结构(从层次结构的根开始)。清单 1 显示了一个示例 LDAP 用户记录。


清单 1. 示例 LDAP 用户记录
                
dn: uid=guest1,ou=people,dc=ibm,dc=com
objectclass: ePerson
objectclass: inetOrgPerson
cn: guest1	
sn: guest1
displayName: Guest
uid: guest
userpassword: welcome
ou: people
			

清单 1 中的用户记录称为 Guest1,其用户 ID 是 guest1,密码是 welcomeePerson 类型的 LDAP 记录存储其他用户信息,如地址、电话等。

可以基于角色对 LDAP 树中创建的用户进行分组。例如,可以将所有具有管理权限的用户分组到 admin 角色下。清单 2 显示了根据用户进行了分组的用户(user1、user2)。


清单 2. 按角色进行分组的用户
                
dn: cn=users,ou=groups, dc=ibm,dc=com
objectClass: groupOfUniqueNames
uniqueMember: cn=user2,cn=user1,ou=groups,dc=ibm,dc=com
cn: users
			

与前面的两个 LDAP 项类似,可以创建一个复杂结构来对用户和角色进行映射。可以将这些详细信息存储在 LDIF 文件中,并上载到任何 LDAP 服务器。本文中使用的示例应用程序包含了一个 LDIF 文件,其 LDAP 结构如图 1 中所示。


图 1. LDAP 结构
LDAP 结构




回页首


配置 Tivoli Directory Server

在本部分,我们将配置 Tivoli Directory Server。

可以将 Tivoli Directory Server 作为独立产品与应用服务器安装在同一台计算机上,也可以安装于不同的计算机上。缺省情况下,该产品会使用 389 端口。Tivoli Directory Server 提供了用于在服务器上执行各种操作的实用工具。可以通过 Web 接口 (http://localhost:12100/IDSWebApp/IDSjsp/IDSConsoleFrameWork.jsp) 调用这些操作,但需要在安装 IBM Tivoli Directory Server 时已经安装了 WebSphere Application Server – Express。

要启动 IBM Tivoli Directory Server 并将 LDIF 文件上载到该服务器,请输入清单 3 中所示的命令:


清单 3. Directory Server 命令
                
adding suffix : idscfgsuf -s dc=ibm,dc=com
start itds : ibmslapd
add ldap entries from ldif : ldapadd -h ldap://<ldaphostname> -D "cn=root" -w 
"********" -f <ldif_directory_path><filename>.ldif
			

图 2 显示了在 Directory Server 中创建的 LDAP 项。


图 2. Directory Server 中的 LDAP 项
Directory Server 中的 LDAP 项




回页首


Web 应用程序安全与 LDAP

Web 应用程序安全包括身份验证和授权两方面。将在部署描述符中对此进行定义。在部署描述中,可以为身份验证和授权配置特定的领域。要使用 LDAP,请将身份验证配置为基于表单的身份验证,并调用 LDAP 来检查用户 ID 和凭据。

类似地,可以基于部署描述符中定义的角色对用户进行分组,并在 LDAP 服务器中创建对应的项。图 3 显示了 Web 部署描述中的安全约束和角色、WebSphere Application Server Community Edition 的“Geronimo”计划以及其与 LDAP 中各项的映射关系。


图 3. 安全约束和角色映射
安全约束和角色映射




回页首


为 LDAP 领域创建 Community Edition 计划

要在 WebSphere Application Server Community Edition 中使用 LDAP,需要创建相应的领域计划。然后可以在服务器范围内或应用程序(或模块)范围内部署此计划。清单 4 显示了 Community Edition 的一个示例 LDAP 领域计划。


清单 4. LDAP 领域计划
                
<?xml version="1.0" encoding="UTF-8"?>
<configuration
    xmlns="http://geronimo.apache.org/xml/ns/deployment-1.0"
    configId="org/apache/geronimo/ldap-secure"
>
    
  <gbean name="ldap-login"
        class="org.apache.geronimo.security.jaas.LoginModuleGBean">
        <attribute name="loginModuleClass">
        org.apache.geronimo.security.realm.providers.LDAPLoginModule</attribute>
	   <attribute name="serverSide">true</attribute>
        <attribute name="options">
		initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
		connectionURL=ldap://<host>:389
		connectionUsername=cn=root
		connectionPassword=*******
		connectionProtocol=
		authentication=simple
		userBase=ou=people,dc=ibm,dc=com
		userSearchMatching=uid={0}
		userSearchSubtree=false
		roleBase=ou=groups,dc=ibm,dc=com
		roleName=cn
		roleSearchMatching=(uniqueMember={0})a
		roleSearchSubtree=false
		userRoleName=
	  </attribute>
        <attribute name="loginDomainName">ldap-realm</attribute>
    </gbean>
    
    <gbean name="ldap-realm" 
    	class="org.apache.geronimo.security.realm.GenericSecurityRealm">
    <attribute name="realmName">ldap-realm</attribute>
    <reference name="LoginModuleConfiguration">
    <name>ldap-login</name>
    </reference>
    <reference name="ServerInfo">
  	  <module>geronimo/j2ee-system/1.0/car</module>
   	  <name>ServerInfo</name>
</reference>
<reference name="LoginService">
<module>geronimo/j2ee-security/1.0/car</module>
<name>JaasLoginService</name></reference>
    </gbean>
    
    <gbean name="ldap-login"  class="org.apache.geronimo.security.jaas.JaasLoginModuleUse">
    <attribute name="controlFlag">REQUIRED</attribute>
    <reference name="LoginModule">
    	<name>ldap-login</name>
    </reference>
    </gbean>
</configuration>
			

此 LDAP 领域计划包含三个 Gbean。部署后,它将配置 JAAS 使用 LDAPLoginModule 来连接到 LDAP 服务器并检索用户凭据。要获得用户详细信息,可以使用以下查询:userSearchMatching=uid={0} and roleSearchMatching=(uniqueMember={0})。LDAPLoginModule 将基于这些项来检索用户和角色。

可以通过使用 Community Edition 控制台或以下部署工具来部署 LDAP 领域:

java -jar bin\deployer.jar deploy ldap-realm-ibm.xml

现在已经配备了 LDAP 领域,接下来需要配置 LDAP Web 应用程序使用该 LDAP 领域。可以将这些细节添加到 geronimo-web.xml 计划文件,如清单 5 中所示。


清单 5. geronimo-web.xml 计划
                
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/web" 
			   xmlns:sec="http://geronimo.apache.org/xml/ns/security" 
			   configId="org/apache/geronimo/ldap-secure-demo" 
			   parentId="org/apache/geronimo/ldap-secure">
	<context-root>/ldap-demo</context-root>
	<context-priority-classloader>false</context-priority-classloader>
	<container-config container="Tomcat">
		<config-param name="TomcatRealm">TomcatJAASRealm</config-param>
	</container-config>	
	<security-realm-name>ldap-realm</security-realm-name>
	<security>
		<default-principal realm-name="ldap-realm">
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"
			 name="system" />
		</default-principal>
		<role-mappings>
		<role role-name="admin">
		<realm realm-name="ldap-realm">
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
			 name="admin" designated-run-as="true" />
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"
			 name="system" />
		</realm>
		</role>
		<role role-name="users">
		<realm realm-name="ldap-realm">
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
			 name="users" designated-run-as="true" />
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" 
			name="user1" />
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"
			 name="user2" />
		</realm>
		</role>
		<role role-name="guest">
		<realm realm-name="ldap-realm">
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
			name="guest" designated-run-as="true" />
		<principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" 
			name="guest1" />
		</realm>
		</role>
		</role-mappings>
	</security>
</web-app>
			

geronimo-web 计划中的角色应与 Web 描述符和 LDAP 组中创建的角色匹配。

该 Web 应用程序已打包为 EAR 文件,在示例 zip 文件 (LDAPExample.ear) 中提供。可以使用 Community Edition 控制台来部署该应用程序。





回页首


使用示例应用程序

在前面的部分中,我们已经创建了一个 LDAP 领域,并对 Web 应用程序进行了相应配置,以使用该领域。我们还对该应用程序和领域进行了部署。要访问该 Web 应用程序,请输入以下 URL:"http://localhost:8080/LDAPWeb"。现在可以登录到 Web 应用程序,该程序将通过从 LDAP 目录检索相关项来验证用户 ID 和凭据。登录时,该应用程序将基于 Web 部署描述符中定义的角色检查对受保护资源的访问权限。





回页首


结束语

在本文中,我们在 Directory Server 中创建了用户记录,并在 Community Edition 中部署了一个 LDAP 领域。文中提供的示例 Web 应用程序演示了如何使用 LDAP 领域来获取用户凭据和角色。






回页首


下载

描述名字大小下载方法
Sample Web applicationwasce-ldap-sample.zip25 KB  FTP|HTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论


关于作者

Krishnakumar Balachandar 是位于印度 Bangalore 的 IBM Software Labs 的高级软件工程师。他在 Geronimo 和 WebSphere Community Edition 的支持团队工作。您可以通过 krishnakumarb@in.ibm.com 与 Krishnakumar 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM、Tivoli 和 WebSphere 是 International Business Machines Corporation 在美国和/或其他国家的注册商标。 Java 和所有基于 Java 的商标都是 Sun Microsystems, Inc. 在美国和/或其他国家的商标。 其他公司、产品或服务名称可能为各自所有者的商标或服务标志。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款