在AD中对用户进行身份验证的最佳通用LDAP查询是什么?

时间:2011-08-26 19:47:54

标签: authentication active-directory ldap

我们正在使用LDAP对用户进行身份验证。 LDAP管道的另一端是一个非常大的Active Directory实现。我们发现身份验证查询花费的时间太长(15秒或更长)。

以下是我们正在做的事情的代表:

ldap://ldap.myco.com/DN?dc=myco,dc=com??sub?(sAMAccountName=John)

实现这一目标的最佳方法是什么方式适用于任何巨大的AD实施?

谢谢!

3 个答案:

答案 0 :(得分:3)

虽然您的搜索还包括计算机和组,但sAMAccountName是已定义索引的。您可以使用(&(objectCategory=person)(objectClass=user)(samAccountName={0}))进一步限定它。

更大的问题是你为什么要开始搜索?如果您只想通过LDAP绑定检查用户名和密码,请执行绑定到LDAP:// DC = myco,DC = com并访问myDirectoryEntry.NativeObject。如果它抛出异常你就会遇到问题。

另外,什么是“ldap.myco.com”?那是负载均衡器吗?它是您域名的名称吗?你应该能够在这里进行无服务器绑定......

答案 1 :(得分:0)

如果索引sAMAccountName,则此查询应为O(1)或O(log(N)),具体取决于索引结构。如果它需要15秒,它听起来像O(N),这意味着它没有被索引。

答案 2 :(得分:0)

布莱恩·德斯蒙德(Brian Desmond)的回答很明显(而且我已经投了赞成票)。通过简单的绑定,您将获得最佳性能。

为了冗余(并传播负载),您应该有多个可用于绑定的DC。 Microsoft AD客户端用于定位DC的算法(基于站点成员资格和SRV RR权重和首选项值)非常重要,但您可以通过获取要绑定的几个DC的地址(或名称)来进行近似。