在LDAP3搜索中获取“ memberOf”以查找特定用户

问题描述

我从LDAP得到这样的示例结果:

USERID123,Users,UserProvisioning,Production,ztb.icb.company.com
dn: CN=USERID123,OU=Users,OU=UserProvisioning,OU=Production,DC=ztb,DC=icb,DC=company,DC=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: USERID123
sn: Mueller
c: DE
l: Frankfurt
title: M.Sc.
telephoneNumber: +49 69 136 27289
givenname: Lukas
distinguishedname: CN=USERID123,DC=zt
b,DC=com
instanceType: 4
whenCreated: 20191023230941.0Z
whenChanged: 20200907052944.0Z
displayName: Mueller,Lukas
uSNCreated: 21302914
memberOf: CN=GG_APP-013979-DQI-KYC-PROD-CONSUMER-GCRR,OU=Groups,OU=UserProvisi
oning,DC=com
memberOf: CN=GG_APP-013479-DQI-KYC-DEV-CONSUMER-GCRR,DC=com
memberOf: CN=GG_APP-011479-DQI-KYC-TUD-CONSUMER-GCRR,DC=com

我正在尝试获取Python LDAP3中用户“ USERID123”的所有“ memberOf”。

我尝试了以下操作:

if conn.bind():
    conn.search(
        search_base='OU=Groups,DC=com',search_filter='(objectClass=group)',search_scope='SUBTREE',attributes=['memberOf']
    )

    for entry in conn.entries:
        print(entry.memberOf.values)

但是我无法在conn.search中重新创建查询以查找特定用户的“ memberOf”。如何执行此查询以在ldap3查询中获得所需的结果?

解决方法

您可以在“来自LDAP的示例结果”中看到memberOf的所有值。

如果您确实要查询所有组,则用户是Member的用户,那么您的搜索将更像是:

conn.search( search_base='OU=Groups,OU=UserProvisioning,OU=Production,DC=ztb,DC=icb,DC=company,DC=com',search_filter='&((objectClass=group)(member=CN=USERID123,OU=Users,DC=com))',search_scope='SUBTREE',attributes=['member']

或者,如果使用Microsoft Active Directory,请使用以下过滤器:

(member:1.2.840.113556.1.4.1941:=(CN=USERID123,DC=com))