активный каталог удаленного доступа - PullRequest
0 голосов
/ 07 января 2020

Я установил активный каталог на компьютере aws EC2 windows 2012. это прекрасно работает в местном масштабе. Я установил Active Directory Explorer и локально могу просматривать пользователей и т.д. c ...

проблема в том, что я пытаюсь подключиться с помощью ldap (используя c#) с компьютера который находится за пределами сети. Я могу успешно войти в систему, так как на моем EC2 есть IPL c. поэтому ValidateCredentials c# функции проходит нормально.

Проблема в том, что когда я пытаюсь сделать запрос по указанному пути c, чтобы получить пользователей, я получаю исключение: я вызываю функцию: DirectoryEntry.Exists ("LDAP: // OU = Students, DC = имел oop, DC = com ") и независимо от того, какой путь я пытаюсь, он не работает. я получаю исключение: «указанный домен либо не существует, либо с ним нельзя связаться».

Я думаю, что проблема в том, что у локального oop .com нет доступа из-за пределов сети, поскольку у него нет общедоступного c ip - это было имя леса, созданное мной локально.

Как мне решить эту проблему, чтобы я мог подключиться к своему активному серверу каталогов с точки доступа ap c, находящейся вне сети?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Итак, вы делаете это:

DirectoryEntry.Exists("LDAP://OU=Students,DC=hadoop,DC=com")

И это не работает. У вас есть две проблемы.

  1. Когда вы предоставляете путь LDAP с таким характерным именем, как этот, Windows отправляет запрос в домен, к которому присоединен компьютер. Если объект находится в одном домене, все хорошо. Если он находится в доверенном домене, D C возвращает направление («Я не могу сказать вам, что это такое, но я знаю, кто может»), и ваш компьютер инициирует новый запрос к другому D C. Поскольку компьютер, на котором вы работаете, не подключен к этому домену или доверенному домену, он не знает, где go найти этот объект, и поэтому выдается исключение. Так что вы должны сказать ему, где go. Это можно сделать, включив имя домена (или укажите c D C имя, если хотите) в путь:
LDAP://hadoop.com/OU=Students,DC=hadoop,DC=com
Но вам также необходимо передать учетные данные, которые DirectoryEntry.Exists не поддерживает. Однако, исходный код доступен , поэтому вы можете просто украсть и изменить ™, чтобы создать версию, которая принимает учетные данные:
public static bool Exists(string path, string username, string password)
{
    DirectoryEntry entry = new DirectoryEntry(path, username, password);
    try
    {
        _ = entry.NativeObject;       // throws exceptions (possibly can break applications)
        return true;
    }
    catch (System.Runtime.InteropServices.COMException e)
    {
        if (e.ErrorCode == unchecked((int)0x80072030) ||
             e.ErrorCode == unchecked((int)0x80070003) ||   // ERROR_DS_NO_SUCH_OBJECT and path not found (not found in strict sense)
             e.ErrorCode == unchecked((int)0x800708AC))     // Group name could not be found
            return false;
        throw;
    }
    finally
    {
        entry.Dispose();
    }
}

Единственное изменение, которое вы должны сделать, это изменить использование Bind, так как это метод internal и не может использоваться простыми смертными, такими как мы. Вместо этого я просто получаю свойство NativeObject, которое вызывает для нас Bind() .

Вы можете использовать это так:

var ouExists = Exists("LDAP://hadoop.com/OU=Students,DC=hadoop,DC=com", "username", "password");
0 голосов
/ 07 января 2020

убедитесь, что ваша группа безопасности включила доступ для портов LDAP и активных каталогов

https://docs.netapp.com/us-en/cloud_volumes/aws/reference_security_groups_windows_ad_servers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...