用户注册表的联合
多个注册表中散布有 user 和 group 信息时,将使用用户注册表联合。例如,该信息可能在两个不同 LDAP 中、同一 LDAP 的两个子树中或某个文件中,或者这些用户属于某个系统。该信息甚至可能在定制用户数据存储库中。通过联合注册表,可以统一方式搜索和使用这些分布式用户信息,并不断存储这些信息。通过使用联合注册表,可在 Liberty 中使用统一视图来对用户进行认证和授权。
注: 快速启动安全性 (quickStartSecurity) 无法与其他用户注册表(例如,LDAP 注册表、基本注册表、SAF 注册表和定制注册表)联合。
如何联合用户注册表?
LDAP 注册表在缺省情况下是联合的。如果在 server.xml 中配置了多个 LDAP 注册表,那么这些注册表将自动联合,不需要附加配置。它们可以是两个独立 LDAP 或同一 LDAP 中的两个子树。如果一个或多个 LDAP 注册表配置有一个或多个基本注册表、SAF 注册表或定制注册表,那么这些注册表也会联合而不需要任何附加配置。以下示例显示与 LDAP 联合的基本注册表:
<server description="Federation">
<featureManager>
<feature>appSecurity-2.0</feature>
<feature>servlet-3.0</feature>
<feature>ldapRegistry-3.0</feature>
</featureManager>
<basicRegistry id="basic" realm="SampleBasicRealm">
<user name="admin" password="password" />
<user name="user1" password="password" />
<user name="user2" password="password" />
<group name="memberlessGroup" />
<group name="adminGroup">
<member name="admin"/>
</group>
<group name="users">
<member name="user1"/>
<member name="user2"/>
</group>
</basicRegistry>
<ldapRegistry id="LDAP1" realm="SampleLdapIDSRealm" host="LDAPHOST1.ibm.com" port="389" ignoreCase="true"
baseDN="o=ibm,c=us"
ldapType="IBM Tivoli Directory Server"
searchTimeout="8m"
recursiveSearch="true">
</ldapRegistry>
</server>
如果要联合两个基本注册表或者将基本注册表与 SAF 注册表或定制注册表联合,那么可通过添加 federatedRegistry-1.0 和
appSecurity-2.0 功能部件来完成此任务,如以下示例所示:
<feature>appSecurity-2.0</feature>
<feature>federatedRegistry-1.0</feature>
以下示例显示如何联合两个基本注册表:<server description="Federation">
<featureManager>
<feature>appSecurity-2.0</feature>
<feature>federatedRegistry-1.0</feature>
</featureManager>
<basicRegistry id="basic1" realm="SampleBasicRealm1">
<user name="admin" password="password" />
<user name="user1" password="password" />
<user name="user2" password="password" />
<group name="memberlessGroup" />
<group name="adminGroup">
<member name="admin"/>
</group>
<group name="users">
<member name="user1"/>
<member name="user2"/>
</group>
</basicRegistry>
<basicRegistry id="basic2" realm="SampleBasicRealm2">
<user name="user3" password="password123" />
<user name="user4" password="password123" />
<group name="memberlessGroup2" />
<group name="users2">
<member name="user3"/>
<member name="user4"/>
</group>
</basicRegistry>
</server>
可以将基本注册表添加至定制的联合存储库。通过在 federatedRepository 元素中定义
participatingBaseEntry 名称字段来添加基本注册表。基本注册表的参与基本条目是设置为该基本注册表的领域名称的组织属性。以下示例显示两个基本注册表的定制联合:
<federatedRepository>
<primaryRealm name="PrimaryRealm">
<participatingBaseEntry name="o=SampleBasicRealm1"/>
<participatingBaseEntry name="o=SampleBasicRealm2"/>
</primaryRealm>
</federatedRepository>
还可将定制注册表添加至定制联合存储库。通过在 federatedRepository 元素中定义
participatingBaseEntry 名称字段来添加定制注册表。定制注册表的参与基本条目是设置为该定制注册表的域名的组织属性。以下示例显示定制条目的联合:
<federatedRepository>
<primaryRealm name="PrimaryRealm">
<participatingBaseEntry name="o=customRegistryRealm1"/>
</primaryRealm>
</federatedRepository>
要在启用了 SAF 授权的情况下将 SAF 注册表与一个或多个非 SAF 注册表联合,必须配置分布式身份过滤器,以便将任何非 SAF 用户映射至 SAF 用户标识。以下示例显示了在已启用分布式身份映射的情况下与 LDAP 注册表联合的 SAF 注册表。在 federatedReposity 元素中指定了 primaryRealm 名称,因此,所有定义为将 LDAP 用户映射至 SAF 用户标识的 RACMAP 概要文件都必须指定 REGISTRY(NAME('FEDREALM')。
<server description="Federated SAF and LDAP">
<featureManager>
<feature>appSecurity-2.0</feature>
<feature>federatedRegistry-1.0</feature>
<feature>zosSecurity-1.0</feature>
<feature>ldapRegistry-3.0</feature>
</featureManager> <federatedRepository>
<primaryRealm name="FEDREALM">
</primaryRealm>
</federatedRepository>
<!-- SAF user registry -->
<safRegistry id="saf" realm="SAFREALM" />
<safAuthorization id="saf" racRouteLog="ASIS" />
<safCredentials unauthenticatedUser="WSGUEST"
profilePrefix="BBGZDFLT"
mapDistributedIdentities="true" />
<safRoleMapper profilePattern="%profilePrefix%.%resource%.%role%"
toUpperCase="false" />
<ldapRegistry id="LDAP1" realm="LDAPREALM"
ldapType="IBM Tivoli Directory Server"
host="LDAP1HOST.ibm.com" port="389"
baseDN="o=ibm,c=us"
searchTimeout="8m"
ignoreCase="true"
bindDN="uid=ldapadm,cn=users,o=ibm,c=us"
bindPassword="ldapadmpw"
sslEnabled="false">
<idsFilters
userFilter="(&(uid=%v)(objectclass=inetOrgPerson))"
groupFilter="(&(cn=%v)(objectclass=groupOfUniqueNames))"
userIdMap="*:uid"
groupIdMap="*:cn"
groupMemberIdMap="groupOfUniqueNames:uniquemember">
</idsFilters>
</ldapRegistry>
</server>