none
Ricerca su directory OpenLDAP RRS feed

  • Discussione generale

  • Buongiorno,

    ho un problema cercando di implementare una ricerca su OpenLDAP. L'amministratore mi ha fornito un account con i diritti per farlo ma ho un problema di timeout, nel senso che dopo aver fatto con successo il bind con l'account per la ricerca, formulo una richiesta di ricerca informazioni su un utente ma il server non mi risponde e la richiesta va in timeout (60 secondi).

    Di seguito il codice, tralasciando impostazioni di sicurezza TLS che vedrei in un secondo momento.

            // verifica autenticazione
            public Utente Autentica(string username, string password)
            {
                Utente u = new Utente();
    
                try
                {
                    string hostName = "ip_openldap";
                    
                    // login con utente autorizzato;
                    string hostNameAndSSLPort = hostName; // +":636";
                    string readerUsername = "utente_x_ricerche";
                    string readerPassword = "pwd_x_ricerche";
    
                    // establish a connection 
                    LdapConnection connection = new LdapConnection(hostNameAndSSLPort);
    
                    // create an LdapSessionOptions object to configure session settings on the connection. 
                    LdapSessionOptions options = connection.SessionOptions;
                    options.ProtocolVersion = 3;
                    options.SecureSocketLayer = false;
                    // bypassa verifica certificato: da risolvere
                    options.VerifyServerCertificate += (conn, cert) => { return true; }; 
    
                    //options.StartTransportLayerSecurity(new DirectoryControlCollection());
    
                    NetworkCredential credential = new NetworkCredential(readerUsername, readerPassword);
                    connection.Credential = credential;
                    connection.AuthType = AuthType.Basic;
                    // autentico il cercatore
                    connection.Bind();
    
                    //options.StopTransportLayerSecurity();
    
                    DNBase = "dc=dominio,dc=it";
    
                    string what = "uid=" + username;
                    string[] attributesToReturn = { "givenName", "cn", "mail" };
                    
                    SearchRequest request = new SearchRequest(
                        DNBase,
                        "((" + what + "))",
                        System.DirectoryServices.Protocols.SearchScope.Subtree,
                        attributesToReturn
                        );
    
                    SearchResponse response = (SearchResponse)connection.SendRequest(request);
    
                    if (response.Entries.Count == 0)
                    {
                        throw new Exception("Utente non trovato.");
                    }
                    else if (response.Entries.Count > 1)
                    {
                        throw new Exception("Errore durante la lettura informazioni: corrispondenze multiple.");
                    }
                    else
                    {
                        options.StartTransportLayerSecurity(null);
                        // verifica credenziali
                        connection.Bind(new NetworkCredential(response.Entries[0].DistinguishedName, password));
                        options.StopTransportLayerSecurity();
    
                        // compilazione campi
                        SearchResultEntry entry = response.Entries[0];
                        u.NomeCompleto = (string)entry.Attributes["cn"][0];
                        u.Nome = (string)entry.Attributes["givenName"][0];
                        u.Mail = (string)entry.Attributes["mail"][0];
                    }
                }
                catch(Exception ex)
                {
                    u.Errore = ex.Message;
                }
    
                return u;
            }
    

    Ho provato su 2 server versioni di openldap 2.4.39 e 2.4.23 stesso comportamento.

    L'amministratore mi dice che dai log di ldap vede il bind del cercatore corretto, la ricezione della richiesta di ricerca e la risposta, ma il mio codice non capta la risposta..

    Grazie per l'aiuto

    lunedì 8 febbraio 2016 13:20

Tutte le risposte