2013-01-23 20 views
7

Sono un newbie totale a questoIl server LDAP non è disponibile

Tentativo di connessione a un server LDAP con PrincipalContext. Ho provato tutte le soluzioni su questo sito senza alcun risultato.

Le cose che ho provato:

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain); 

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "ldap://localhost:389/dc=maxcrc,dc=com"); 

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "maxcrc.com"); 

Tutti danno lo stesso risultato:

server LDAP non disponibile

Solo ContextType.Machine opere in fondo.

Non sono sicuro se il mio server LDAP è impostato correttamente:

  • Host: localhost
  • Porto: 389
  • Base DN: dc = maxcrc, dc = com
  • URL: ldap: // localhost: 389/dc = maxcrc, dc = com

test con Softerra LDAP Browser

dei tutorial dall'inizio alla fine sarà molto apprezzato ...

+3

Questo potrebbe sembrare stupido, ma prova 'LDAP: //' invece di 'ldap: //' come so che sono le connessioni fisse per me in passato – freefaller

+0

nessun risultato ancora lo stesso. ma grazie – Anarchy101

+0

È possibile connettersi al server LDAP utilizzando qualsiasi strumento AD standard? – mellamokb

risposta

0

Si consiglia di provare il tuo indirizzo macchina locale invece:

ldap://127.0.0.1:389/dc=maxcrc,dc=com 

Se questo non funziona, mi piacerebbe fuoco fino Wireshark e fagli catturare il traffico sulla porta 389 mentre stai tentando di collegarti tramite Softerra.

Ai miei tempi con LDAP e .Net DirectoryServices, questo errore indica in genere che la sintassi o la convenzione di denominazione del percorso non è corretta o che non punta a un endpoint di directory valido.

0

Questo errore potrebbe essere dovuto al tentativo di connettersi come "Anonimo" senza specificarlo esplicitamente. Per impostazione predefinita tutte le connessioni sono negoziabili. Quindi, se provi qualcosa del genere potresti provare quanto segue:

LdapDirectoryIdentifier ldap = new LdapDirectoryIdentifier("My Hostname or IP Address",10389); //10389 might be your non default port 
LdapConnection connection = new LdapConnection(ldap); 
connection.AuthType = AuthType.Anonymous; 
3

Ho avuto problemi simili. Si è scoperto che dovevo passare nome utente e password nell'inizializzazione dell'oggetto. Prova a utilizzare una dichiarazione come di seguito:

PrincipalContext insPrincipalContext = 
new PrincipalContext(ContextType.Domain, 
"ldap://localhost:389/dc=maxcrc,dc=com", 
userName, 
password); 

Assicurati anche che il tuo nome utente abbia dominio in esso.

Ad esempio,

userName = "mydomainname" + "\\" + "john_jacobs" 
+0

Per me ha funzionato passando le credenziali direttamente all'inizializzazione dell'oggetto come suggerito. –

5

Ho fronte lo stesso problema e ho trovato una soluzione.

Sono in grado di connettersi facilmente utilizzando codice seguente:

ADUser_Id = "domainName\\username"; //make sure user name has domain name. 
Password = "xxxx"; 
var context = new PrincipalContext(ContextType.Domain,"server_address", ADUser_Id,Password); 
/* server_address = "192.168.15.36"; //don't include ldap in url */ 
+0

@ Damian, grazie. mi occuperò dei prossimi post. –

+0

Specificare il nome host del server ha funzionato per me. Sono stato in grado di utilizzare l'utente senza il dominio per 'ADUser_Id'. Buon post. – vapcguy

0

Utilizza il seguente overload costruttore per PrincipalContext:

public PrincipalContext(
    ContextType contextType, 
    string name, 
    string container 
) 

e separare il nome del server LDAP dalla stringa:

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "localhost:389", "dc=maxcrc,dc=com"); 

https://msdn.microsoft.com/en-us/library/bb348316%28v=vs.110%29.aspx

0

Nel mio ambiente ho dovuto creare il contesto principale con solo il nome host del controller di dominio e quindi convalidare separatamente le credenziali dell'utente.

string domainControllerName = "PDC"; 
string domainName = "MyDomain"; // leave out the .Local, this is just to use as the prefix for the username if the user left it off or didn't use the principal address notation 
string username = "TestUser"; 
string password = "password"; 

using (var ldap = new PrincipalContext(ContextType.Domain, domainControllerName)) 
{ 
    var usernameToValidate = username; 
    if (!usernameToValidate.Any(c => c == '@' || c == '\\')) 
      usernameToValidate = $"{domainName}\\{username}"; 

    if (!ldap.ValidateCredentials(username, context.Password, ContextOptions.SimpleBind)) 
     throw new UnauthorizedException(); 
} 

Questo esempio consente per tutte e tre le varianti al nome utente per convalidare:

Problemi correlati