Привязка LDAP к DC в другом лесу после привязки к его домену приводит к ошибке LDAP 82 - PullRequest
0 голосов
/ 03 мая 2018

Я столкнулся со странной ошибкой при попытке привязки к конкретному DC с помощью класса LdapConnection. Мне удалось сократить код до следующего:

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, а во втором соединении я использую точный адрес постоянного тока. Конечно, я проверил, что первое соединение идет к тому же DC, что и второе.

Ошибка возникает только тогда, когда я указываю AuthType.Kerberos для метода аутентификации. Ошибка возникает всегда, когда я пытаюсь подключиться к домену в другом лесу, и только иногда, когда я подключаюсь к контроллеру домена в локальном лесу.

Вероятно, я могу обойти ошибку, дважды используя доменное имя, но тогда я не гарантирую липкость, когда получу соединение с конкретным DC.

Как я могу убедиться, что второе подключение идет к тому же DC, не получая эту ошибку?

1 Ответ

0 голосов
/ 03 мая 2018

Ошибка возникает, только когда я указываю AuthType.Kerberos для метода аутентификации.

Тогда ваша проблема - аутентификация Kerberos.

В командной строке попробуйте (используйте краткое имя контроллера домена, а не полное доменное имя):

setspn dc1

В этом списке должна быть куча, но я думаю, что проблема здесь будет "ldap / dc1.domain1.test.local / domain1.test.local". Вы видите это в списке?

Если нет, вы можете добавить его. Как администратор домена, используйте это из командной строки:

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

Более подробно здесь, хотя отсутствующий SPN, о котором говорится в этой статье, относится к GUID. Список внизу показывает, как должен выглядеть список 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 будут отображаться в журнале системных событий. Это даст вам лучшее представление о том, почему это не получается.

...