绑定到其域后,LDAP绑定到另一个林中的DC会导致LDAP错误82

时间:2018-05-03 07:52:47

标签: .net active-directory ldap kerberos

尝试使用LdapConnection类绑定到特定DC时遇到了一个奇怪的错误。我设法将代码删除到以下内容:

static void Main(string[] args)
{
    var cred = new NetworkCredential("username", "password", "domainFQDN");
    try
    {
        var ldapConnection = new LdapConnection(new LdapDirectoryIdentifier("domain1.test.local", 389, false, false), cred, AuthType.Kerberos);
        ldapConnection.Bind();
        Console.WriteLine("Connected 1");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }

    try
    {
        var ldapConnection2 = new LdapConnection(new LdapDirectoryIdentifier("dc1.domain1.test.local", 389, true, false), cred, AuthType.Kerberos);
        ldapConnection2.Bind();
        Console.WriteLine("Connected 2");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }

    Console.ReadLine();
}

此计划的输出始终如一:

Connected 1
System.DirectoryServices.Protocols.LdapException: A local error occurred.
   at System.DirectoryServices.Protocols.LdapConnection.BindHelper(NetworkCredential newCredential, Boolean needSetCredential)
   at System.DirectoryServices.Protocols.LdapConnection.Bind()

调用之间的唯一区别是,在第一个连接中,我使用LdapDirectoryIdentifier中的域FQDN,而在第二个连接中,我使用确切的DC地址。当然,我确认第一个连接与第二个连接到同一个DC。

仅当我为身份验证方法指定AuthType.Kerberos时才会出现此错误。当我尝试连接到不同林中的域时,总是会发生错误,有时仅当我连接到本地林中的DC时才会发生错误。

我可以通过两次使用域名来解决错误,但是一旦我获得与特定DC的连接,我就无法确保粘性。

如何在不收到此错误的情况下确保第二个连接转到同一个DC?

1 个答案:

答案 0 :(得分:0)

  

只有在我为身份验证方法指定AuthType.Kerberos时才会出现错误。

您的问题是Kerberos身份验证。

从命令行尝试(使用DC的短名称,而不是FQDN):

setspn dc1

该列表中应该有一堆,但我认为这里的问题是“ldap / dc1.domain1.test.local / domain1.test.local”。你在列表中看到了吗?

如果没有,您可以添加它。作为域管理员,请从命令行使用此命令:

setspn -a ldap/dc1.domain1.test.local/domain1.test.local dc1

此处有更多详细信息,虽然在该文章中讨论的丢失的SPN是具有GUID的SPN。底部的列表显示了SPN列表的外观:https://support.microsoft.com/en-ca/help/308111/a-missing-service-principal-name-may-prevent-domain-controllers-from-r

如果已列出该SPN,则可以按照此处的说明开启Kerberos日志记录:https://support.microsoft.com/en-ca/help/262177/how-to-enable-kerberos-event-logging

启用日志记录后,Kerberos错误将显示在系统事件日志中。它会让你更好地了解它失败的原因。