Liberty LDAP 始终使用完整 DN 来搜索组成员资格

问题描述 投票:0回答:1

OpenLiberty 23.0.0.9 连接到 OpenLDAP 2.5.16。在

中使用自定义过滤器

用户由 uid 标识 - 例如,用户 Roy McRoy 的 uid 为“roy”。

组属于 objectClass posixGroup。成员由 MemberUid 属性中的“uid”值标识。例如,组“Controlled”具有属性值“MemberUid:roy”,以表明 roy 是“Controlled”组的成员。

How it looks in Apache Directory Studio

groupMemberIdMap 是“posixGroup:memberUid”

但是 - 这就是问题所在! - 当 Liberty 搜索组以查找 MemberUid 值时,它始终使用用户的完整 DN= 进行搜索,而不仅仅是短 uid 值。

我想在 Liberty 中配置 LDAP 存储库,以便 Liberty 搜索组:

memberUid=roy

...而不是...

memberUid=cn=roy,ou=i2users,dc=i2support,dc=lan

但到目前为止似乎没有任何效果。我究竟做错了什么?如何仅搜索“roy”的群组成员身份?

通过 server.xml 中的元素打开 LDAP 日志记录会显示 Liberty 使用 roy 的完整 DN 值作为搜索词:

[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

正确地找不到任何组 - 因为 MemberUid 的实际值只是“roy”,而不是“cn=roy,ou=foousers,dc=foosupport,dc=lan”

这是我的存储库:

<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 信息:

  1. 用户“罗伊·麦克罗伊”
[root@LDAP01 ~]# ldapsearch -xLLL -D "cn=Manager,dc=foosupport,dc=lan" -W "(uid=roy)"
Enter LDAP Password: 
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: [email protected]
userPassword:: UEBzc3dvcmQwMSE=
cn: roy
  1. “受控”组
[root@LDAP01 ~]# ldapsearch -xLL -D "cn=Manager,dc=foosupport,dc=lan" -W "(&(objectClass=posixGroup)(cn=Controlled))"
Enter LDAP Password: 
version: 1

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

  1. 我自己的 ldap 搜索看看 roy 是否是 Controlled 组的成员,效果很好:
[root@LDAP01 ~]# ldapsearch -xLL -D "cn=Manager,dc=foosupport,dc=lan" -W "(&(objectClass=posixGroup)(memberuid=roy))"
Enter LDAP Password: 
version: 1

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

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

[root@LDAP01 ~]# 

如何让 Liberty 搜索组成员身份,就像我自己的 ldapsearch 推荐搜索一样?

没有范围可以更改 LDAP 数据库,它属于拥有数千名用户、数百个办公室和许多其他 LDAP 消耗应用程序的联邦政府组织。我必须让 Liberty 与 LDAP 服务器配合使用,而不是相反。

非常感谢您的帮助!

ldap open-liberty
1个回答
0
投票

最后,我们与 IBM 建立了 PMR,以便 WebSphere SME 可以查看它。他们的回答是:这在自由城是做不到的。 Liberty 将始终使用完整 DN 搜索组成员身份,您不能强制它使用截断的 uid 值。

可以说,根本问题是 RFC 2307 中的模糊性。它在模式中定义了 memberUid,但没有说明memberUid 值中应该包含哪些数据。一种实现可以使用纯 uid,另一种实现使用完整 DN。它们都是“RFC 兼容” - 但不兼容。

因此我们放弃 LDAP,转而考虑客户端证书身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.