您好我们遇到了与此IBM文章相同的问题:
我们有两个子域下的用户(在同一个顶级域下)。是否有IBM Liberty专家可以建议如何正确构建搜索过滤器,以便我们可以获取用户(请参阅下面的Liberty错误日志)。
以下是我们当前的过滤器:
<ldapRegistry baseDN DC=abc,DC=CORP,DC=com" bindDN=" CN=ServiceID,OU=Service Accounts,OU=Accounts,DC=abc,DC=CORP,DC=com" bindPassword="${bindPassword}" host=" abc.corp.com” id="ldap" ignoreCase="false" ldapType="Microsoft Active Directory" port =”3268" realm="BasicRealm">
<activedFilters groupFilter="(&(cn=%v)(objectcategory=group))" groupIdMap="*:cn" groupMemberIdMap="memberOf:member" userFilter="(&(objectcategory=user)(userPrincipalName=%v))" userIdMap="user:sAMAccountName">
</activedFilters>
</ldapRegistry>
看到错误:
com.ibm.ws.security.registry.EntryNotFoundException:CWIML4538E:无法完成用户注册表操作。在配置的用户注册表中,XXXXXXX主体名称存在多条记录。所有用户注册表的主体名称必须是唯一的。 at com.ibm.ws.security.wim.registry.util.UniqueIdBridge.getUniqueUserId(UniqueIdBridge.java:305) 在com.ibm.ws.security.wim.registry.WIMUserRegistry.getUniqueUserId(WIMUserRegistry.java:291) 在com.ibm.ws.security.authentication.jaas.modules.HashtableLoginModule.handleUserId(HashtableLoginModule.java:177) 在com.ibm.ws.security.authentication.jaas.modules.HashtableLoginModule.login(HashtableLoginModule.java:127) 在com.ibm.ws.kernel.boot.security.LoginModuleProxy.login(LoginModuleProxy.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在javax.security.auth.login.LoginContext.invoke(未知来源) 在javax.security.auth.login.LoginContext.access $ 000(未知来源) 在javax.security.auth.login.LoginContext $ 4.run(未知来源) 在javax.security.auth.login.LoginContext $ 4.run(未知来源) 在java.security.AccessController.doPrivileged(未知来源) 在javax.security.auth.login.LoginContext.invokePriv(未知来源) 在javax.security.auth.login.LoginContext.login(未知来源)
答案 0 :(得分:0)
如错误消息所示,问题是由具有相同principalName的多个用户引起的。如果您发现了不需要的用户,通常可以通过缩小ldap注册表的baseDN或为用户指定搜索库来解决这个问题:
<ldapEntityType name="PersonAccount">
<searchBase>ou=Users,DC=abc,DC=CORP,DC=com</searchBase>
</ldapEntityType>