例如,在 C# 中执行 LDAP 请求时,我不需要显式使用 和 的 LDAP 服务器PrincipalContext
地址DirectoryEntry
。我可以使用一个,但即使没有它也会找到用户。
这是如何运作的?默认使用哪一个?我可以检查一下默认的是哪一个吗?
例如,在 C# 中执行 LDAP 请求时,我不需要显式使用 和 的 LDAP 服务器PrincipalContext
地址DirectoryEntry
。我可以使用一个,但即使没有它也会找到用户。
这是如何运作的?默认使用哪一个?我可以检查一下默认的是哪一个吗?
Active Directory“成员”系统使用 DNS SRV 记录来发现域控制器。该域通常有多个 DC 提供相同的 LDAP 服务,您的系统
Netlogon
服务将选择一个可用的 DC(最好与您位于同一 AD“站点”)。搜索基础 DN 直接从 DNS 域派生(即,AD 中没有任何
o=Foo Inc.
目录,这与非 AD LDAP 系统不同)。LDAP 服务器的身份验证是使用 Windows 登录时存储的 Kerberos 凭据自动完成的。您可以使用
nltest
查找所有 DC 或系统选择的 DC:nslookup -q=SRV _ldap._tcp.<domain>
nslookup -q=SRV _ldap._tcp.dc._msdcs.<domain>
nslookup -q=SRV _ldap._tcp.<site-name>._sites.dc._msdcs.<domain>
nltest /dsgetdc:<domain>
nltest /dnsgetdc:<domain>
nltest /dsgetsite
您还可以随时观察网络数据包,以了解您的程序正在与哪些服务器进行通信。
非AD系统通常没有默认的LDAP服务器。(虽然
_ldap._tcp.<domain>
SRV 记录经常在 AD 外部使用,但没有多少 LDAP 客户端会使用它们。)