IBM WebSphere 开发者技术期刊: 使用 WebSphere Application Server V6.1 中的联合存储库扩展用户注册表选项

使用 Virtual Member Manager

IBM® WebSphere® Application Server V6.1 提供了一种新的联合用户存储库功能,这方便了您访问和维护位于多个存储库中的用户数据,特别是自从能够通过新的 Virtual Member Manager 实用工具进行配置(而非通过编码)获得此功能以来,更方便了用户使用。

Paul Ilechko, 高级解决方案架构师, EMC

Paul Ilechko 是 IBM Software Services for WebSphere 的一名高级解决方案架构师。Ilechko 先生拥有 25 年的 IT 行业经验,具有大型机和分布式技术背景。他从 WebSphere 和 J2EE 技术的起始阶段就开始从事这些技术工作。他的主要目标是帮助 IBM 的客户成功地使用这些产品。Ilechko 先生拥有伦敦大学的数学学士学位。



Vikram Desai (vdesai@us.ibm.com), 解决方案架构师, EMC

Vikram Desai photoVikram Desai 是 IBM Business Partner Technical Enablement 的架构师。他与多个 IBM 业务合作伙伴协作,为他们提供 WebSphere 平台支持。他以前是 WebSphere Portal、NextWeb、Federated NAS、WebSphere Application Server 和 Encina++/Encina 开发团队的成员。



2007 年 3 月 29 日

摘自 IBM WebSphere 开发者技术期刊

引言

在此之前,对于用户信息存储在多个独立的用户存储库环境,IBM WebSphere Application Server 对该环境的支持存在一定的局限性。在 6.1 版之前,可用的注册表选项只有:

  • 本地操作系统注册表。
  • 单个孤立的轻量级目录访问协议 (LDAP) 注册表。
  • 自定义用户注册表接口的单一实现。

实现支持访问多个其他注册表的自定义用户注册表是有可能的,但这可能会花费大量的开发精力,并且最终结果可能是仅支持只读操作。

WebSphere Application Server V6.1 提供了一个新方法:联合用户注册表。此功能让使用多个存储库变得非常简单,因为此功能是使用新的 Virtual Member Manager (VMM) 通过配置而不是开发获得的。

从本质上说,此功能提供了将多个独立用户存储库中的项映射到一个虚拟存储库的能力。联合存储库包括一个单一的,该域由一组独立的用户存储库组成。每个存储库都可以是一个完整的外部域,或者是该存储库中的一个子树(例如在 LDAP 中)。每个存储库的根都映射到联合存储库中的基本项,该基本项实际上是虚拟域的分层命名空间中的起始点。在介绍如何配置 VMM 时您会对此有一个更清楚的了解。

这里我们讨论的是一种包含来自多个基本存储库的用户的逻辑注册表思想。对于 WebSphere Application Server 运行时,仍然只有一个注册表,因此,计算单元中的所有应用程序仍共享这个单一的注册表。请参见图 1。

图 1. WebSphere Application Server 显示的注册表
图 1. WebSphere Application Server 显示的注册表

Virtual Member Manager 是一个新组件,它组合了 WebSphere 注册表、WebSphere Member Manager(来自 WebSphere Portal)中的一些现有功能,并且是安全管理功能的一个子集。VMM 的目标是:

  • 提供一个独立于存储库的编程接口。
  • 支持各种可插入存储库。
  • 为用户提供一种获得联合模块中多个存储库的单一视图的能力。

细心的读者可能会注意到,自定义存储库没有包括在构成联合存储库域的存储库列表中。就目前而言,VMM 尚不支持自定义存储库。因此,如果您需要自定义存储库,则无法使用 VMM。相反,您必须编写一个自定义用户注册表,这与以前版本中所需的操作相同。这种局限性有望在不久的将来得到解决。

联合存储库包含的域可能由以下存储库中的标识组成:

  • 内置于系统的基于文件的存储库。
  • 一个或多个外部 LDAP 存储库。
  • JDBC 可访问数据库存储库。

与本地操作系统、独立 LDAP 目标或自定义注册表项不同,联合存储库为用户和组管理提供了读写能力。当您配置联合存储库时,可以使用以下选项添加、创建和删除用户和组:

在本文中,我们将通过配置独立 WebSphere Application Server V6.1 实例,使其与包含文件、数据库和 LDAP 存储库的联合存储库一起运行,向您介绍如何设置和使用 Virtual Member Manager 的基本功能。我们将逐渐向联合存储库添加一些存储库,并演示为进行用户和组管理,作为一个逻辑统一的存储库查看不同存储库的能力。我们还将学习如何配置 LDAP 组成员选项。

联合存储库的局限性

  • 从管理控制台中只能将一个用户存储库配置为创建用户/组的目标。缺省情况下,该存储库是文件存储库,但可以更改该存储库,稍后您将了解到这一点。您可以使用用户和组管理 wsadmin 命令在其他存储库中创建用户/组,或对这些存储库使用本机工具。

  • 用户名(例如,LDAP 用户 ID)在不同的存储库中必须是唯一的。例如,用户在不同的 LDAP 存储库中不能具有相同的用户 ID,甚至在不同的组织结构下也不能相同。

  • 如果联合存储库中的一个或多个存储库停止运行,那么您将无法进行身份验证(甚至作为管理员也无法验证),而不论您的特定 ID 存储在哪个存储库中。VMM 组件总是检查所有存储库才能让身份验证成功。

  • 尽管 VMM 能够支持多个域,但 WebSphere Application Server 目前仅支持一个域。它在计算单元级别定义并由所有应用程序共享。

  • 在 WebSphere Application Server V6.1 信息中心列出了其他限制


配置联合存储库

缺省情况下,WebSphere Application Server V6.1 在安装过程中支持管理安全性。除非禁用此选项,否则基于文件的存储库将被自动用作用户注册表。

我们将通过配置内置的基于文件的存储库开始我们的练习,并假设在安装过程中禁用了管理安全性。如果在安装过程中没有禁用管理安全性选项,则需要在安装过程中提供管理用户名和密码,如图 2 所示。

图 2. 启用管理安全性
图 2. 启用管理安全性

我们将假设在安装过程中禁用了此选项,因此我们可以向您介绍如何从头配置联合存储库。(一般情况下,在安装过程中不应禁用管理安全性。)

要使用安全配置,请访问 WebSphere Application Server 管理控制台,并导航到 Security => Secure administration, applications and infrastructure。对于本文而言,我们仅配置管理安全性。另外,还应始终启用应用程序安全性,以便应用程序能够利用 WebSphere Application Server 安全性。

下面的部分将介绍如何使用以下选项设置联合存储库:

  1. 内置的基于文件的存储库
  2. 数据库存储库
  3. LDAP 存储库(以 Windows® Active Directory 和 IBM Tivoli® Directory Server 为例)。

使用内置的基于文件的存储库设置联合存储库

这里,您将使用缺省的基于文件的存储库配置联合存储库,然后启用管理安全性。

  1. 在 Secure administration, applications, and infrastructure 对话框中,从 Available realm definitions 下拉菜单中选择 Federated repositories,然后单击 Configure(图 3)。

    图 3. 开始联合存储库设置
    图 3. 开始联合存储库设置
  2. 联合存储库由一个包含多个基本项的单一域构成。WebSphere Application Server 中的域是用户注册表的一个实例;该域是表示用户注册表的顶级逻辑项。在联合存储库配置中,联合存储库实例就是该域。缺省情况下,域名称为 defaultWIMFileBasedRealm(图 4)。此名称可以根据您的环境更改为任何合适的名称;它不必与域的基本项相同。尽管实际上您可以将该域名称更改为更合适的名称,但在本文中,我们将把该域名称保留为缺省名称。

  3. 基本项标识域中一组对象的根(或起始点);在一个域中可以有多个基本项。在给定的存储库中,每个基本项都映射到目录树的根。在平面存储库中(例如基于文件的存储库),基本项是存储库中所有项的根。在分层存储库中(例如 LDAP),基本项映射到目录信息树中标识 DIT 中子树顶部的一个项。(我们将在介绍 LDAP 存储库时进一步阐述该内容。)缺省情况下,存在一个与基于文件的存储库对应的单一基本项:o=defaultWIMFileBasedRealm(图 4)。这是基于文件的存储库的根的标识符。在此基本项下创建的所有用户都将有一个完全限定的名称 uid=<UID>, o=defaultWIMFileBasedRealm。由于基于文件的存储库不是分层结构,因此该文件存储库中的所有对象都将存储在此基本项下。

  4. WebSphere Application Server V6.1 对管理环境的管理员用户标识和验证服务器间通信的服务器标识进行了区分。在大多数情况下,服务器标识是自动生成的,不存储在存储库中。不过,如果您要将版本 5.0.x 或 6.0.x 节点添加到版本 6.1 计算单元,则必须确保版本 5.x 或版本 6.0.x 服务器标识和密码在存储库中对此计算单元进行了定义。在这种情况下,您需要输入服务器用户标识和密码(图 4)。由于我们处于单服务器环境中,其中只有一个 WebSphere Application Server V6.1 节点,因此您只能选择自动生成的服务器标识。我们将创建一个名为“wasadmin”的用户作为管理用户,该用户将在基于文件的存储库中创建和存储。单击 OK

    图 4. 配置域属性
    图 4. 配置域属性
  5. 输入并确认管理用户 ID 的密码,然后单击 OK(图 5)。

    图 5. 选择管理用户 ID 的密码
    图 5. 选择管理用户 ID 的密码
  6. 现在已经完成了基本的联合存储库配置。接下来,您可以配置 WebSphere Application Server 来使用管理安全性。为此,请按下列步骤操作(图 6):

    1. 单击 Enable administrative security

    2. Application securityJava 2 security 在缺省情况下均被选中。为简化此示例,请取消选中 Java 2 security

    3. 确保将 Current realm definition 的值设置为 Federated repositories。如果需要更改此值,请从 Available realm definitions 下拉列表中选择 Federated repositories,然后选择 Set as current。这将更改 Current realm definition 的值。

    图 6. 启用管理安全性
    图 6. 启用管理安全性
  7. 单击 Apply,保存更改,然后重新启动服务器。现在已启动管理安全性。文件存储库已配置,并且可以通过管理控制台将用户和组添加到文件存储库。

为谨慎起见,文件存储库存储在以下目录中的概要文件中:$WAS_HOME\profiles\<profileName>\config\cells\<cellName>\fileRegistry.xml。此文件包含用户和组标识符,其中包括用户项的加密密码。用户的密码是使用单向散列算法加密的,即应用 VMM 配置文件 (wimconfig.xml) 中指定的消息摘要算法。消息摘要算法的缺省值为 SHA-1。可以使用 wsadmin 命令 updateIdMgrFileRepository 将该算法更新为不同的值。可以与该命令一起使用的一个参数是 messageDigest Algorithm。

  1. 要再次使用管理控制台,您需要使用刚才配置的管理用户 ID 和密码进行登录。

  2. 现在,通过导航到管理控制台中的用户和组部分,您可以查看文件存储库中的用户。转到 Manage Users 窗格并搜索现有用户;使用通配符 * 进行搜索,以查看缺省文件存储库中的用户(图 7)。

    图 7. 使用通配符搜索用户
    图 7. 使用通配符搜索用户
  3. 在管理控制台中,您可以创建和删除组,添加和删除用户以及修改用户的组成员关系。现在我们将把名为 userFileRegistry 的用户添加到注册表。为此,只需选择 Create 并输入所需的信息。在完成之后,Search for users 屏幕将显示两个用户(图 8)。

    图 8. 创建新用户
    图 8. 创建新用户

为了便于理解和遵循本文中的屏幕截图,我们将按照约定把用户名配置为以下格式:user<Registryname>Registry。这样可以方便地标识用户存储在哪个存储库中。此命名约定仅适用于本文,在使用联合存储库时不是 WebSphere Application Server V6.1 所必需的。


使用数据库存储库设置联合存储库

现在您将配置数据库存储库和在上一部分中创建的基于文件的存储库。

在 Virtual Member Manager 中,数据库存储库是一个具有特定预定义模式的数据库,它支持 PersonAccount、Group 和 OrgContainer 的标准 VMM 实体类型。可以使用用户定义的实体类型扩展该模式,但该主题已超出了本文的讨论范围。还可以对此模式进行扩展,例如,您可以向预定义的实体添加其他用户属性。它不支持使用包含用户和组信息的现有应用程序数据库。

数据库存储库还能够支持包含其他存储库中的用户的组,但只有数据库存储库才能够支持;基于文件的存储库和 LDAP 存储库没有此功能。(有关如何使用 updateIdMgrRepository 命令配置 repositoriesForGroups 参数的详细信息,请参阅 WebSphere Application Server Information Center

为了防止发生意外,请在配置其他存储库之前备份 wimconfig.xml 文件。如果有必要回滚在新存储库配置过程所作的更改,您应能够通过使用备份版本替换 wimconfig.xml 来做到这一点。但还是要慎重,因为这是一个不受支持的机制。

在发布时,无法通过管理控制台配置数据库存储库;它只能使用命令行 wsadmin 命令进行配置。在本部分中,您将了解如何使用 IBM DB2® 数据库配置数据库用户存储库。(如果愿意,可以使用 WebSphere Application Server 支持的任何其他数据库,并且这些步骤是类似的。)对位于概要的以下配置目录的文件 wimconfig.xml 进行了所有属于新存储库配置的更改。$WAS_HOME\profiles\<profileName>\config\cells\<cellName>\wim\config。

要使用 JDBC 类型 4 驱动程序配置 DB2 数据库存储库:

  1. 创建 DB2 数据库。数据库存储库的表将由 wsadmin 命令创建。对于此配置,我们创建了一个名为 wimDB 的数据库。

  2. 配置 JNDI 名称为 jdbc/wimDB 的 DB2 数据源(使用管理控制台或 wsadmin 命令)。此数据源将用于配置访问此数据库的联合存储库。(请参阅信息中心中的 Configuring a data source using the administrative console

    如果在运行 wsadmin 命令配置数据库存储库时,您遇到在类路径中未发现 DB2 类的问题,请检查并确保 WebSphere Application Server 变量 DB2_JDBC_DRIVER_PATH 已正确设置。

  3. 通过使用此 wsadmin 命令设置存储库来创建 wimDB 表(将 $WAS_HOME 替换为 WAS_HOME 环境变量的实际值):

    wsadmin>$AdminTask setupIdMgrDBTables {-schemaLocation "$WAS_HOME\etc\wim\setup"
    -dbPropXML "$WAS_HOME \etc\wim\setup\wimdbproperties.xml" -databaseType db2 -dbURL 
    jdbc:db2:wimDB -dbDriver com.ibm.db2.jcc.DB2Driver -dbAdminId <db2User> 
      -dbAdminPassword 
    <db2UserPwd> -dn o=database.org -reportSqlError true}

    在 schemaLocation $WAS_HOME\etc\wim\setup 下,您将发现用于创建 wimDB 表的特定于数据库的 SQL 文件。对于 DB2,SQL 文件位于 $WAS_HOME\etc\wim\setup\database\db2 下。请注意,命令中的 -dn 项定义要存储在数据库存储库中的对象的专有名称的根。这不必要与联合数据库存储库的基本项相同。数据库存储库中的用户和组将在此根专有名称下创建,它可以是您希望的任意值(o=database.org 是本文选择的任意值)。

    成功实现此命令将创建如图 9 所示的表(与 DB2 控制中心中显示的相同)。

    图 9. 创建的数据库表
    图 9. 创建的数据库表
  4. 使用此 wsadmin 命令向 VMM 注册 DB 存储库:

    wsadmin>$AdminTask createIdMgrDBRepository {-id DB2Repos -dataSourceName jdbc/wimDB 
    -databaseType db2 -dbURL jdbc:db2:wimDB -JDBCDriverClass com.ibm.db2.jcc.DB2Driver 
    -dbAdminId <db2User> -dbAdminPassword <db2UserPwd>}

    在此命令中,此处使用的 ID (DB2Repos) 是联合存储库中此存储库的存储库标识符。(在图 10 中看到对它的定义时会清楚这一点。)此命令设置使用直接 JDBC 连接访问数据库存储库所需的数据源名称和值。之所以必需设置该项,是因为存在以下情况:即当不存在任何数据源时,运行时可能需要访问联合存储库;在此情况下,将使用直接 JDBC 访问。

  5. 使用以下 wsadmin 命令配置此存储库的基本项:

    wsadmin>$AdminTask addIdMgrRepositoryBaseEntry {-id DB2Repos -name 
    "o=database.org" –nameInRepository="o=database.org" }

    此处的基本项名称 "o=database.org,"setupIdMgrDBTables 命令的 -dn 选项的值相同。在此情况下,我们对联合存储库中的基本项名称 (-name) 使用了与实际数据库存储库中相同的名称 (-nameInRepository)。这不是必需的,可以将联合存储库中的基本名称设置为与实际存储库根专有名称不同的名称。

  6. 将新的 baseEntry 添加到缺省域或基本域:

    wsadmin>$AdminTask addIdMgrRealmBaseEntry 
      {-name "defaultWIMFileBasedRealm" -baseEntry "o=database.org"}
  7. 保存配置:

    wsadmin>$AdminConfig save
  8. 退出 wsadmin 并重新启动服务器。现在已经配置了数据库存储库。

  9. 当您登录到管理控制台时,将会看到数据库存储库现在已成为联合存储库的一部分(图 10)。

    图 10. 数据库存储库已添加到联合存储库
    图 10. 数据库存储库已添加到联合存储库

    而且,在管理存储库面板(图 11)中,数据库存储库显示为定义的存储库。(从联合存储库中删除一个存储库不会删除存储库定义;它只是一个独立步骤。)

    图 11. 管理存储库
    图 11. 管理存储库
  10. 在数据库存储库中尚没有任何用户。当在管理控制台中创建新用户时,也会在基于文件的存储库中创建这些用户。不过,如果还希望能够从控制台将用户添加到数据库存储库,您需要进行配置更改。现在让我们了解一下如何在管理控制台中更新联合存储库配置,以便在创建用户时,也会在数据库存储库中创建这些用户,而不是在缺省的基于文件的存储库中创建。

    导航到联合存储库配置面板:Secure administration, applications, and infrastructure => Available Realm Definitions => Configure,并选择 Supported entity types(图 12)。

    图 12. 支持的实体类型
    图 12. 支持的实体类型
  11. 要修改缺省的用户创建,以便可以使用数据库存储库,您需要将缺省父目录的基本项更改为数据库存储库基本项(即 o=database.org)。在本例中,对 PersonAccount 进行更改可以将用户添加到数据库存储库。(我们不准备进行详细介绍,但您要清楚对 Group 也需要执行此更改。)选择 PersonAccount

    图 13. PersonAccount 属性
    图 13. PersonAccount 属性
  12. 将 Base entry for the default parent(图 13)的值更改为 o=database.org 并单击 Apply

    图 14. 更改基本项的值
    图 14. 更改基本项的值
  13. 保存更改(如图 14 所示)并重新启动服务器以便基本项更改生效。

    当使用管理控制台添加新用户时,只能将其放在一个存储库中:由您设置的基本项定义的存储库是当前缺省存储库。如果需要将用户添加到其他存储库,请使用这些产品中可用的本机工具。

  14. 现在,按前面的内容所示通过选择 Users and groups => Manage users => Create 创建一个用户 ID 为 userDatabaseRegistry 的用户。完成此操作之后,文件存储库和数据库存储库中的用户都将显示(图 15)。

    图 15. 搜索用户
    图 15. 搜索用户

您已经了解了如何配置数据库存储库以及如何进行更改,以便在数据库存储库中创建新用户和组,而不是在缺省的基于文件的存储库中创建。在下面的部分中,您将看到如何配置联合存储库,以便将用户和组添加到 LDAP。


使用 LDAP 存储库设置联合存储库

现在将把两个 LDAP 目录添加到配置的联合存储库,它目前包含两个存储库:缺省的基于文件的存储库和数据库存储库。

将 LDAP 目录添加到联合配置的基本步骤是:

  1. 将 LDAP 目录添加到联合存储库配置可用的存储库列表。

  2. 添加位于 LDAP 目录中特定搜索基的 baseEntries。对于单个 LDAP 目录,可以添加具有不同搜索基的多个基本项。

我们要添加的两个 LDAP 目录是:

  • Windows Active Directory LDAP
  • IBM Tivoli Directory Server。

添加 Active Directory LDAP

将 Active Directory LDAP 添加到可用存储库列表:

  1. 登录到管理控制台,然后导航到 Security => Secure administration, applications, and infrastructure => Federated repositories => Manage repositories,并选择 Add

    图 16. 添加 LDAP 存储库
    图 16. 添加 LDAP 存储库
  2. 如图 16 所示输入或选择值,然后选择 OK 并保存配置。这将把 Active Directory LDAP 添加到配置可用的联合存储库列表。您会注意到通过此配置可以指定 LDAP 故障转移服务器。如果愿意,您可以按 IP 地址或主机名列出多个 LDAP 服务器副本,并且应用服务器将在主服务器失败时自动切换到备用服务器。还可以为添加的 LDAP 配置其他属性;我们将在稍后讨论自定义和配置 LDAP 属性时对其进行介绍。

  3. 现在已经将存储库添加到联合存储库列表,需要将一个基本项配置为指向 LDAP 目录中的一个子树(搜索基)。基本项可让 LDAP 子树中的项成为联合存储库域中的一部分。

    要在管理控制台中配置基本项,请导航到 Security => Secure administration, applications and infrastructure =>Available realm definitions => Federated repositories => Configure

  4. 这时将显示域中已经配置的基本项;在此情况下,您将看到与基于文件的存储库和数据库存储库对应的基本项(图 17)。现在您将从 Active Directory LDAP 添加一个项。选择 Add Base entry to Realm

    图 17. 现有基本项
    图 17. 现有基本项
  5. 在下面的屏幕中(图 18),选择 TestADS 作为 Repository 的名称,以指示前面配置的 Active Directory LDAP 的名称。向联合存储库添加基本项的专有名称和在 Active Directory LDAP 目录中添加基本专有名称,以指定搜索根。前一名称定义虚拟域中此特定存储库的逻辑根项,后一名称是 LDAP 中将成为联合存储库一部分的对象集子树的根。您在这里实际完成的是定义 LDAP 子树根和虚拟域根(基)项之间的映射,以便 LDAP 中该子树下的所有对象都显示在定义基本项下的逻辑域中。

    如果“Distinguished name of a base entry in this repository”保留为空,则基本项将映射到 LDAP 服务器的根 (""),并且所有操作都将在根目录处执行。对于大多数 LDAP 服务器而言,这是不可行的。因此,您应联系 LDAP 管理员以确定目录的正确根。

    图 18. 存储库引用
    图 18. 存储库引用
  6. 在保存之后,图 19 中显示的基本项将显示在联合存储库中。

    图 19. 此域中的存储库
    图 19. 此域中的存储库

    指定的搜索基为 dc=testadsserver,dc=local。在本文中,我们仅为配置的 Active Directory LDAP 指定了一个子树。如果您希望配置其他子树,可以在适当的子树根中添加其他基本项。

  7. 重新启动服务器。

  8. 现在,如果您转到控制台的用户和组区域并搜索所有用户,就会看到来自基于文件的存储库、数据库存储库和 Active Directory LDAP 服务器的用户。注意 LDAP 用户的专有名称:它是 LDAP 中用户的实际专有名称的串联和联合存储库定义的基本项。注意,实际 LDAP (dc=testadsserver,dc=local) 中的子树根没有显示在用户名中;而是显示了联合存储库中映射的基本项。用户的唯一 ID 是用户 ID 加上基本项,以确保其在联合存储库中的唯一性;不过,这仍要求联合存储库的所有存储库中的所有用户 ID 都必须是唯一的。

    图 20. 所有存储库中的所有用户
    图 20. 所有存储库中的所有用户

    对所有用户的搜索将显示所有存储库中的用户;注意 userADSLDAPRegistry,它是在 ADS 服务器中创建的。类似地,组搜索将显示所有存储库中的组。单击各个用户将提供有关该用户的详细信息以及该用户所属的组。例如,Administrator 是 Active Directory LDAP 中的用户;如果单击此用户 ID,将显示图 21。

    图 21. 用户详细信息
    图 21. 用户详细信息

    如果单击 Groups 选项卡,将显示图 22。

    图 22. 组详细信息
    图 22. 组详细信息

添加 IBM Tivoli Directory Server

添加 Active Directory LDAP 之后,您可以按照类似步骤将 IBM Tivoli Directory Server 添加到目录列表。

  1. 按照上述方法通过管理控制台添加新存储库(图 23)。

    图 23. 添加新存储库
    图 23. 添加新存储库

    与 Active Directory LDAP 的情况相同,我们所需要的是主机名称。还需要配置其他 LDAP 属性,这将在稍后讨论。在添加 IBM LDAP 之后,将有四个存储库显示在可用联合存储库列表中(图 24)。

    图 24. 可用联合存储库
    图 24. 可用联合存储库
  2. 对于 Active Directory LDAP,要让 IBM LDAP 中的项可以在联合存储库中使用,至少需要配置一个指向子树基的基本项。要在管理控制台中添加基本项,请导航到 Security =>Secure administration, applications and infrastructure =>Available realm definitions => Federated repositories => Configure,然后选择 Add Base entry to Realm

  3. 在下面的面板中(图 25),选择 ITDSLdap。将合适的专有名称添加到联合存储库 (o=ITDSLdap),并将相应的基本项添加到实际 LDAP (dc=ibm, dc=com)。在完成时,单击 Apply 应用更改。

    图 25. 配置 IBM LDAP
    图 25. 配置 IBM LDAP

    这些项将作为基本项专有名称 o=ITDSLdap 下联合存储库的一部分添加到 IBM Tivoli Directory Server LDAP 中的 dc=ibm,dc=com 下,如图 26 所示。

    图 26. 联合存储库
    图 26. 联合存储库
  4. 重新启动服务器。现在,对用户的搜索还将显示 IBM LDAP 中的用户(图 27);使用 (cn=users, dc=ibm, dc=com) 中的 ITDS 管理工具在 IBM Tivoli Directory Server 中创建了用户 userIBMLDAPRegistry。

    图 27. 搜索所有用户
    图 27. 搜索所有用户

对于其他目录,请注意用户 IBMLDAPRegistry 符合联合存储库中的基本项,提供唯一域名称。


配置和自定义 LDAP 属性

在上面的部分中,您添加了具有缺省值的 LDAP 目录,但并没有自定义任何 LDAP 属性。现在,我们将介绍在将 LDAP 添加为联合属性的一部分时,可能需要为 LDAP 配置的其他属性。我们说“可能”是因为并不是所有 LDAP 服务器都相同。不同的实现使用不同的对象类来指定用户和组信息,并且使用不同的方法定义组成员关系。因此缺省值可能无法满足需要。下面描述了其他可用属性,并举例说明了如何执行 IBM LDAP 目录的其他配置。

在将 LDAP 添加到联合存储库时,将在配置面板的底部显示其他三个属性的链接:

  • Performance

    使用 Performance 可以为配置的 LDAP 设置与搜索超时和搜索结果限制相关的属性。在优化联合存储库时需要配置 Performance 属性。(有关详细信息,请参阅信息中心中的 Increasing the performance of the federated repository configuration

  • LDAP entity types

    Virtual Member Manager 组件定义了三种即时可用的实体类型,表示联合存储库中管理的对象类型。它们提供了一种方法,可以将不同存储库中的对象类型映射到 VMM 中的公共对象模型。这些实体类型为:

    • Group——表示存储库中与组相关的对象的实体;映射到 LDAP 中的组对象。
    • OrgContainer——表示与组织相关的对象的实体;映射到 LDAP 中的组织对象。
    • PersonAccount——表示与用户相关的对象的实体;映射到 LDAP 中的人员对象。

    例如,让我们看一下 IBM LDAP 的实体类型和组对象配置。IBM LDAP 中的组一般存储在对象类“groupOfNames”和“groupOfUniqueNames”下。实体类型组的缺省值是对象类 groupOfNames。因此需要添加对象类 groupOfUniqueNames,以确保 LDAP 中使用此对象类定义的所有组对象都正确映射到了 VMM 组。

    1. 在管理控制台中,导航到 Secure administration, applications, and infrastructure => Federated repositories => Manage repositories => ITDSLdap => LDAP entity types

    2. 选择 Group 并编辑 Object classes 字段,为其提供值 groupOfNames;groupOfUniqueNames。注意各项由分号隔开(图 28)。

      图 28. 配置组实体
      图 28. 配置组实体
    3. 您还可以在此屏幕上指定 Search bases 和 Search filter。指定的搜索基必须是存储库中基本项的子树。这里,基本项是 dc=ibm,dc=com。搜索筛选器必须是 LDAP 目录中此项的子树。搜索筛选器配置指定用于搜索此实体类型的 LDAP 搜索筛选器。使用 LDAP 搜索筛选器语法,有效的搜索筛选器为: (|(objectclass=groupOfNames)(objectclass=groupOfUniqueNames))

      下面介绍了映射 LDAP 搜索筛选器的其他详细信息。

    4. 保存添加了对象类的组实体类型配置;实体类型配置的对象类显示在图 29 中。

      图 29. 配置的对象类
      图 29. 配置的对象类
  • Group attribute definition

    要让 Virtual Member Manager 知道某个对象属于哪个组,您需要为对象类定义相关的成员关系属性。

    1. 对象类的属性添加在 Group attribute definition => Member attributes 下。在管理控制台中,导航到 Secure administration, applications, and infrastructure => Federated repositories => Manage repositories => ITDSLdap,并选择 Group attribute definition

      图 30. 组成员关系
      图 30. 组成员关系
    2. Name of group membership attribute(图 30)指定一个 LDAP 属性,指出某个项所属的组。这项取决于所使用的 LDAP。对于 IBM LDAP,该值为 ibm-allGroups。对于其他 LDAP 服务器类型,在这里需要配置本身的属性。您还可以指定嵌套和动态组成员关系是否位于成员关系属性范围内。(本文不详细介绍这些概念。)因为并不是所有 LDAP 都具有用于定义组成员关系的支持属性,所以此属性是可选的。如果您使用的 LDAP 不支持此属性,请确保使用它建立组成员关系和改进性能。如果没有指定组成员关系属性,则 LDAP 存储库通过搜索所有组可以建立成员关系,但是,最终的性能可能会非常低下。

    3. 除指定组成员关系属性名之外,您还可以指定组成员关系属性的范围。此值指示 Virtual Member Manager 如何能够遍历 LDAP 目录来确定组成员关系。根据 LDAP 目录实际管理存储在此属性中信息的不同方式,可能需要一个或多个调用来确定成员用户的所有组。指定范围可以提高诸如搜索之类的性能。对于给定 LDAP 的给定组成员关系属性,有必要知道给定 LDAP 是如何管理其成员关系属性的,以及此属性会返回哪些值。例如,对于 Active Directory LDAP,memberOf 属性的范围是 Direct,也就是说,仅返回该用户的直接父组。要确定用户的 Nested 组,VMM 必须首先使用 memberOf 属性获取直接组,然后逐一遍历返回的组并获取其直接组,等等。此过程会导致对 Active Directory LDAP 的多次调用。若要使用 ibm-allGroups 对 IBM Tivoli Directory Server LDAP 执行相同的搜索,则没有必要执行这种详细的搜索,因为 ITDS 维护着所有组,包括使用该属性的嵌套和动态组成员关系。因此,该属性的范围应设置为 All,以便 VMM 知道不执行其他不必要的调用。

    4. 图 30 还显示了两个提供定义反向链接能力的附加属性,即静态组和动态组如何维护关于其成员的信息。对于静态组,成员关系列表作为成员列表在对象本身中维护。对于动态组,在成员关系属性中实际维护的是 LDAP 搜索筛选器。

      对于定义组(如 groupOfNames 和 groupOfUniqueNames)的每个成员对象类,您可以为每个组成员关系定义相应的成员属性。在我们的示例中,groupOfNames 对象的成员属性是 member,这是该对象的缺省属性。您还需要添加一个与 groupOfUniqueNames 对象类对应的 uniqueMember 成员属性。在 Additional Properties 部分中,选择 Member Attributes,然后选择 New

    5. uniqueMember 添加为一个新成员名,并为 Object class 添加 groupOfUniqueNames。保留范围的缺省值 direct。在完成之后,成员属性将如图 31 所示。

      图 31. 成员属性
      图 31. 成员属性

    您还可以为动态组添加成员属性,但这超出了本文的讨论范围。不过,如果有包含静态成员和动态成员的混合组,您可以为同一对象类同时定义静态搜索和动态搜索。

映射 LDAP 搜索筛选器

实体类型(组、PersonAccount、orgContainer)的搜索筛选器指定用于搜索此实体类型的 LDAP 搜索筛选器。搜索筛选器语法是标准 LDAP 筛选器的子集。下面显示了 VMM 中的一些示例筛选器值,并比较了可能已在独立 WebSphere Application Server 用户注册表配置中(未使用联合存储库)使用的查询字符串。

  1. 如果您希望按用户 ID 在 LDAP 子树中搜索,并将您的搜索限制在 Person 对象,则使用的搜索筛选器将是:((uid = %v)(objectclass=Person))。在 VMM 中,需要对此筛选器进行不同的指定,因为 VMM 不支持替换参数(例如“%v”)。在 VMM 中,使用指定值替代用户 ID 的筛选器由 VMM 运行时在登录到应用服务器时进行(根据为在联合存储库中配置的 LDAP 指定的登录属性)。

    例如,在图 16 中:在添加 Active Directory LDAP 时,Login properties 字段指定为“uid”。在登录过程中,这会转换为搜索筛选器“uid=<value>”。如果还需要将搜索限制在 Person 对象,则需要在 PersonAccount 实体类型的搜索筛选器中指定它,如 (objectclass=Person)。对于配置的 Active Directory,将如图 32 所示。

    图 32. 修改搜索筛选器
    图 32. 修改搜索筛选器

    这里,筛选器 (uid=%v) 隐式地映射到 VMM 运行时。此搜索筛选器还潜在地从 VMM 属性重映射到特定于 LDAP 的相应属性。此分离功能使得在各种不同的注册表中能够使用标准属性集。在此特定的示例中,第二个映射级别发生在 VMM 中,其中“uid”在提交搜索字符串以查找实际 LDAP 的用户之前映射到特定于 LDAP 的属性。将 VMM 属性映射到特定于 LDAP 的属性在 VMM 的配置文件 wimconfig.xml 中指定。

    下一个示例是关于 Active Directory 的特定筛选器,该示例详细地介绍了映射。

  2. 接下来,我们将了解特定于 Active Directory LDAP 的搜索筛选器以及在 VMM 中配置此类用户搜索筛选器所需进行的更改。此示例通过匹配“sAMAccountName”或“userPrincipalName”属性中的值在 Active Directory LDAP 中搜索用户帐户。这里,LDAP 搜索筛选器将是: (|(sAMAccountName=%v)(userPrincipalName=%v))

    在 VMM 中映射此搜索字符串转换为将 Active Directory 属性映射到 VMM 中识别的属性。将 VMM 中特定于 LDAP 的属性映射到 VMM 定义的属性,如 uid、cn、sn 等等。此方法提供了通用的独立于 LDAP 的模式定义。

    要执行此搜索,您不需要实际为 LDAP 实体类型 PersonAccount 指定搜索筛选器。事实上,如前例中所示,替代表达式“%v”在 VMM 的搜索筛选器中不受支持。您所需要做的只是确保 Active Directory 用户属性“sAMAccountName”和“userPrincipalName”映射到虚拟成员管理器属性,并且这些属性在登录属性中已配置,以便运行时内部创建的搜索表达式能够执行所需的映射。要完成此任务,请执行以下步骤:

    1. 在 wimconfig.xml 文件中,您需要将 Active Directory 属性“userPrincipalName”映射到 VMM 属性“uid”。在文件中搜索配置了 Active Directory LDAP 的部分,并为此映射添加 <config:attribute> 元素:

      <config:repositories xsi:type="config:LdapRepositoryType"
      adapterClassName="com.ibm.ws.wim.adapter.ldap.LdapAdapter" id="testads"
      isExtIdUnique="true" supportAsyncMode="false" 
      supportExternalName="false" supportPaging="false" 
      supportSorting="false" supportTransactions="false" certificateFilter=""
      certificateMapMode="exactdn" ldapServerType="AD2003" 
      translateRDN="false">
           <config:baseEntries name="o=ads2003"
      nameInRepository="cn=users,dc=testadsserver,dc=local"/>
      				.....
        		<config:attributeConfiguration>
      				       ...
      			<config:attributes name="userPrincipalName" 
      propertyName="uid">
      		<config:entityTypes>PersonAccount</config:entityTypes>
             			 </config:attributes>  
      				        ...
      		 </config:attributeConfiguration>
      				...
      </config:repositories>
    2. 将 Active Directory 属性“sAMAccountName”映射到虚拟成员管理器属性“cn”。与上面的操作一样,将下面的内容添加到 wimconfig.xml 文件:

      	<config:attributeConfiguration>
      		...
      		<config:attributes name="sAMAccountName" 
      propertyName="cn">
      
      	<config:entityTypes>PersonAccount</config:entityTypes>
      		</config:attributes>   
      		...
      	</config:attributeConfiguration>
  3. 通过指定值 uid;cn 配置登录属性,使其接受属性“uid”和“cn”。现在,在登录到应用服务器期间,如果用户 ID 值是“bob@testadsserver.local”,则搜索筛选器将搜索“uid=Bob@testadsserver.local”或“cn=bob@testadsserver.local”。由于“uid”映射到“userPrincipalName”,“cn”映射到“sAMAccountName”,因此“userPrincipalName=bob@testadsserver.local”或“sAMAccountName=bob@testadsserver.local”的等效值是对 Active Directory LDAP 执行的搜索筛选器。

  4. 对于组搜索筛选器,“cn”是用于映射组名称的 VMM 属性。而且,对于搜索筛选器,如 (&(cn=%v)(|(objectclass=groupOfNames)(objectclass=groupOfUniqueNames))),筛选器“cn=%v”由 VMM 隐式映射。筛选器 (|(objectclass=groupOfNames)(objectclass=groupOfUniqueNames)) 在组实体类型的搜索筛选器的项中指定。


使用管理控制台将用户和组添加到基于 LDAP 的存储库

要在 WebSphere Application Server 管理控制台中创建用户和组,并让它们存储在您的 LDAP 存储库中,而不是存储在缺省的基于文件的存储库中,您需要进行一些配置更改,更改操作类似于以前将用户添加到数据库存储库的操作。需要将缺省父项的基本项更改为对 LDAP 存储库配置的项。例如,对于配置的 IBM Tivoli Directory Server LDAP:

  1. 导航到 Secure administration, applications, and infrastructure => Federated repositories => Configure => Supported Entity Type

  2. 将 PersonAccount 更改为含有 BaseEntry cn=users,o=ITDSLdap(图 33)。

    图 33. 修改基本项
    图 33. 修改基本项
  3. 保存并重新启动服务器。现在,通过管理控制台添加的用户将存储在 IBM LDAP 中。


结束语

现在您已经使用四个独立存储库配置了联合存储库。从管理角度看,在应用服务器启动时所有存储库均必须可用。还要求在同一联合存储库配置下配置的所有用户存储库中,用户 ID 必须是唯一的。当用户登录时,Virtual Member Manager 运行时将搜索每个存储库,以查找该用户的所有实例。如果在组合存储库中发现该用户的多个实例,则会显示错误消息。

要对 J2EE 应用程序启用安全性,确保在 WebSphere Application Server 管理控制台中的安全配置部分中选中了应用程序安全选项(缺省情况下选中了此选项)。

安装的应用程序将不同的存储库看成是一个单一的逻辑存储库。所有存储库中的用户和组均可将用户和组映射到 J2EE 应用程序中的受保护资源。相关示例,请访问 http://<hostname>:9080/snoop。您应能够作为四个配置存储库之一中的用户进行登录和验证,以访问此示例应用程序。


致谢

作者非常感谢 Keys Botzum 和 Ranjan Kumar 的帮助,他们对本文进行了审阅,保证了本文的内容合理,技术准确。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=204873
ArticleTitle=IBM WebSphere 开发者技术期刊: 使用 WebSphere Application Server V6.1 中的联合存储库扩展用户注册表选项
publish-date=03292007