OpenLDAP - 无需指定基础即可进行搜索吗?

OpenLDAP - 无需指定基础即可进行搜索吗?

我在使用 OpenLDAP 和 Spring security 时遇到了一些问题,后者使用 dn(过滤器)中的完整路径和空基进行搜索。OpenLDAP 不喜欢这样,查询会失败。问题是我无法控制查询,因此我想知道是否可以配置 OpenLDAP 以允许此类查询。

关于其工作原理的一些细节:

Spring 首先搜索用户,如下所示:

base:ou=something,ou=something,dc=oh,dc=my,dc=god
filter:cn=someUsername

然后,它会返回一个结果,其中输入了整个 dn,并且 base 是一个空字符串,如下所示:

base:
filter:cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god

然后,它使用该结果对 LDAP 进行新的搜索,但搜索失败。

答案1

OpenLDAP 需要知道基本 DN,以便它能够选择从哪个数据库读取。我找不到任何支持跨所有数据库进行“全局”搜索的功能。

但是,您可以添加一个具有空基本 DN 的新数据库。借助relay后端,它可以将所有查询转发到您的主数据库。请参阅slapd-relay(5)以获得更详细的例子(甚至包括重写),但一般用法是:

database  relay
suffix    ""
relay     "dc=example,dc=org"
dn: olcDatabase=relay,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcSuffix:
olcRelay: dc=example,dc=org

(另外,我想知道 Spring 是否真的使用空基数来全部搜索?有些程序以这种方式获取根 DSE(位于基数“”,范围‘基数’),以便自动发现真实的基 DN 和/或服务器功能。)


更新后,似乎真正的问题是 Spring 使用坏过滤器。仅发送 DN 作为过滤器是没有意义的,因为您实际上最终会搜索cn包含 的someUsername,ou=something,dc=something

相反,Spring 应该使用 DN 作为根据

base: cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god
scope: base
filter: (objectClass=*)

如果有必要按 DN 过滤,我认为一个可行的方法是,例如,尽管它在服务器之间有所不同(entryDN 是 OpenLDAP 特定的,而 AD 有 distinguishedName,等等)。(entryDN=dn)(entryDN=cn=foo,ou=bar,ou=baz)

相关内容