darshan559 Ответов: 3

Сервер LDAP не работает


Привет друзья,



Я пытаюсь использовать код для аутентификации пользователей с помощью LDAP. Я перепробовал много типов кода, но не смог подключиться к серверу. Это дает "сервер не работает "или"сервер не может быть достигнут". Я где-то читал, что порт 445 должен быть открыт. Кто-нибудь может сказать, Обязательно ли, чтобы порт 445 был открыт? Фрагменты м выглядит следующим образом:

1-й тип
var host = "domain name here";

          using (LdapConnection ldap = new LdapConnection(host))
          {
              ldap.AuthType = AuthType.Basic;
              ldap.Bind(new NetworkCredential("cn=Manager,dc=maxcrc,dc=com", "newpas")); //
              SearchRequest searchRequest = new SearchRequest();
              searchRequest.DistinguishedName = "cn=Manager,dc=maxcrc,dc=co";
             /earchRequest.Filter = "(&(objectClass=user))";//"(&(objectClass=user))";
              SearchResponse response =
   (SearchResponse)ldap.SendRequest(searchRequest);

              if (response.Entries.Count == 1)
              {

              }

 }


2-й тип
bool isAuthenticated = true;
          using (PrincipalContext pCtx = new PrincipalContext(ContextType.Domain,"LDAP://domain "))
          {
              isAuthenticated = pCtx.ValidateCredentials("dc = maxcrc, dc = com", "secret");
          }


3-й тип
var credential = new NetworkCredential("dc=maxcrc,dc=com","newpass");

          using (var con = new LdapConnection(host) { Credential = credential, AuthType = AuthType.Anonymous, AutoBind = false })
          {
              con.SessionOptions.ProtocolVersion = 3;

         
              con.Bind();


}


4-й тип
 string LDAP_URL = "LDAPS://domain";
            DirectoryEntry entry = new DirectoryEntry(LDAP_URL);
            entry.RefreshCache();
            Object obj = entry.NativeObject;

            DirectorySearcher search = new DirectorySearcher(entry);
            search.Filter = "(sAMAccountName=" + username + ")";
            search.PropertiesToLoad.Add("DisplayName");
            //search.PropertiesToLoad.Add("employeeID");
            search.PropertiesToLoad.Add("mail");
            //search.PropertiesToLoad.Add("SapPrimeDomText");
            SearchResult result = search.FindOne();

            if (result != null)
            {

}


Я даже не могу подключиться к серверу LDAP .

Может ли кто-нибудь подсказать мне, как я могу этого достичь?

спасибо Даршан

3 Ответов

Рейтинг:
2

Yvan Rodrigues

Прежде чем тратить время на код, убедитесь, что сервер LDAP, к которому вы пытаетесь подключиться, доступен.

Обычно один подключается к серверу LDAP на порту tcp / 389 или LDAPs на tcp / 636. Poprt 445 не требуется для запросов LDAP. Это может потребоваться для некоторых собственных подключений Active Directory.

Начните с попытки подключиться к серверу из командной строки.

telnet ldap.example.com 389


Если Telnet не может установить соединение, вы знаете, почему ваш код не может.

Если вы можете подключиться, скачайте и попробуйте бесплатный инструмент LDAP browser.

Если оба вышеперечисленных метода работают, то это ошибка вашего кода.

Вот фрагмент кода с последнего раза, когда я использовал аутентификацию LDAP:

/// <summary>
/// Authenticates the specified UserID.
/// </summary>
/// <param name="UserID">The user ID.</param>
/// <param name="Password">The password.</param>
/// <returns>True upon successful authentication; otherwise false.</returns>
public bool Authenticate(string UserID, string Password)
{
    var L1 = ActivityLog.AddAsync("Authenticating user '{0}'", UserID);
    if (UserID == string.Empty || Password == string.Empty)
    {
        L1.Fail(new Exception("UserID and Password cannot be empty."));
        return false;
    }

    var credential = new NetworkCredential(UserID, Password, CoreSettings.Current.ActiveDirectoryDomain);
    var server = CoreSettings.Current.LDAPServer;
    // Use round-robin DNS if it's available.
    var ips = Dns.GetHostAddresses(server);
    foreach (var ip in ips)
    {
        var L2 = ActivityLog.AddAsync(Importances.Debug, "Connecting to LDAP server '{0} ({1})'", server, ip);
        using (var ldap = new LdapConnection(server))
        {
            try
            {
                ldap.Timeout = TimeSpan.FromSeconds(LdapTimeout);
                ldap.Bind(credential);
                L2.End();
                L1.End();
                return true;
            }
            catch (Exception ex)
            {
                L2.Fail(ex);
                throw;
            }
        }
    }
    return false;
}


darshan559

Привет, Иван Родригес, спасибо за ответ !!! Я попробовал использовать ldap admin, и он подключился ...вот теперь я сомневаюсь в номерах портов !!!!

Yvan Rodrigues

Я добавил пример подключения.

darshan559

Привет, какое пространство имен я использую для ActivityLog и CoreSettings.Текущий.ActiveDirectoryDomain??
спасибо Даршан

Yvan Rodrigues

Просто оставь эти записи в журнале. Это было специфично для приложения, из которого пришел этот фрагмент. Если вы подключаетесь к серверу Active Directory, замените его CoreSettings.Текущий.ActiveDirectoryDomain, та же идея для сервера, который должен быть полным именем хоста или ip-адресом сервера.

Рейтинг:
2

akhoje

Я нашел свой ответ здесь

http://alokkadu.wordpress.com/2010/12/24/the-server-is-not-operational-active-directory/#comment-81

В основном вам нужно установить доверие между вашей машиной и рекламным сервером. Поэтому просто добавьте IP-адрес и домен в надежные сайты, как показано ниже.

Открой свой бег. (Windows + R)
Драйверы типа
Перейдите в папку etc
Откройте файл Hosts в текстовом редакторе
в конце добавьте ip-адрес и доменное имя компьютера Active Directory.
Вот и все. Ваша ошибка устранена..


Рейтинг:
1

Member 12905343

Привет,
Я пытаюсь подключить LDAP с SSL-шифрованием, используя объект DSO в UFT. Когда я подключаю соединение LDAP вручную, оно подключается, но при подключении кода через UFT я получаю ошибку типа "сервер не работает". Я использую здесь VBS.
Тот же код работает и для других соединений, но он не имеет SSL.

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

"Dim oDS: Set oDS = GetObject ("LDAP:")
Дим протокол OAuth: набор с OAuth = сод.OpenDSObject("протокол LDAP://IP-адрес:1636/СN=ХХХ-адм,ОУ=человека,о=админ","ХХХ-ком","пароль",1)