You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenLiberty LDAP组查询问题:如何用uid而非完整DN检索成员?

问题:OpenLiberty LDAP组查询使用用户DN而非UID导致匹配失败
  • 环境:OpenLiberty 23.0.0.9 + OpenLDAP 2.5.16
  • LDAP结构规则:
    • 用户通过uid标识(如用户Roy McRoy的uid为roy)
    • 组为posixGroup对象类,成员通过memberUid属性存储用户uid值(如Controlled组的memberUid包含roy)
  • 已配置groupMemberIdMap="posixGroup:memberUid",但Liberty查询组时仍使用用户完整DN(如cn=roy,ou=foousers,dc=foosupport,dc=lan)作为memberUid的查询值,导致组匹配失败。

LDAP日志确认的错误查询行为:

[2023-12-24T14:55:17.909+1100] 0000002f LdapConnectio >  search Entry  
         dc=foosupport,dc=lan
         (&(|(objectClass=posixGroup)(objectClass=posixgroup))(memberUid=cn=roy,ou=foousers,dc=foosupport,dc=lan))
         null
   javax.naming.directory.SearchControls@25af6f52
         null
[2023-12-24T14:55:17.909+1100] 0000002f ContextManage >  getDirContext Entry

当前ldapRegistry配置

<ldapRegistry id="OpenLDAPreg"
              ldapType="Custom"
              realm="ldapRealm"
              host="LDAP01.foobar.lan"
              port="389"
              baseDN="dc=foobar,dc=lan"
              bindDN="cn=Manager,dc=foobar,dc=lan"
              bindPassword="P@ssword01!">
    <customFilters userIdMap="*:uid"
                   groupIdMap="*:cn"
                   userFilter="(&amp;(uid=%v)(objectclass=person))"
                   groupFilter="(&amp;(cn=%v)(|(objectclass=posixGroup)))"
                   groupMemberIdMap="posixGroup:memberUid">
    </customFilters>
</ldapRegistry>

LDIF信息

用户Roy McRoy

dn: cn=roy,ou=foousers,dc=foosupport,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: roy
sn: Analyst
displayName: Roy McRoy
mail: fred@foosupport.lan
userPassword:: UEBzc3dvcmQwMSE=
cn: roy

组Controlled

dn: cn=Controlled,ou=fooGroups,dc=foosupport,dc=lan
gidNumber: 259
cn: Controlled
objectClass: posixGroup
objectClass: top
memberUid: bill
memberUid: fred
memberUid: roy

解决方案

问题核心是缺少userMemberIdMap配置,导致Liberty默认使用用户DN作为组匹配的标识。添加该配置指定用户用于组匹配的属性为uid即可解决。

修改后的customFilters配置如下:

<customFilters userIdMap="*:uid"
               groupIdMap="*:cn"
               userFilter="(&amp;(uid=%v)(objectclass=person))"
               groupFilter="(&amp;(cn=%v)(|(objectclass=posixGroup)))"
               groupMemberIdMap="posixGroup:memberUid"
               userMemberIdMap="person:uid">
</customFilters>

配置说明

  • userMemberIdMap="person:uid":指定用户对象类(person,匹配用户的objectClass)对应的组匹配标识属性为uid,Liberty查询组时会自动使用用户的uid值替代DN去匹配memberUid。

修改配置后重启Liberty,LDAP日志中的组查询条件会变为(memberUid=roy),可正常匹配到目标组。

内容的提问来源于stack exchange,提问作者Andrew McLaren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:00:57