Benutzer mit den meisten Antworten
LDAPS - Fehler 0x80005000 oder Server down

Frage
-
Hallo.
Ich versuche schon eine Weile per LDAPS auf ein AD zuzugreifen. Aber ich erhalte nur Meldungen wie "Server ist down" oder "Error 0x80005000".
Ich habe bereits eine Lösung basierend auf LDAP geschrieben, diese funktioniert problemlos. Aber an dem "S" hinter "LDAP" beisse ich mir gerade die Zähne aus. Habe auch viel im WWW gesucht, dabei wenig vernünftiges gefunden, und nichts führte zu einem positiven Ergebnis. Auch die vielen Bücher in die ich investiert habe, helfen nicht weiter.Wo liegt der Trick? Kann mir irgendjemand weiter helfen?
Ich programmiere ein Konsolenprogramm, welches die Daten aus dem AD liest, und eine Oracle Datenbank abgleicht. Sowohl Oracle, AD als auch mein Programm befinden sich an verscheidenen Orten.
Der grobe Aufbau ist wie folgt:
DirectoryEntry entry = new DirectoryEntry("LDAPS://" + server, username, password, AuthenticationTypes.SecureSocketLayer);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(objectClass=user)";
SearchResultCollection searchResults = null;
searchResults = search.FindAll();Ich habe verschiedene Variationen benutzt: LDAP:, LDAPS:, mit Port 636 oder ohne, auch die Kombination LDAP://LDAPS:// und verschiedene AuthenticationTypes.
In einem anderen Programm habe ich vor kurzem den Zugriff per HTTPS geschafft, aber die Methode die ich dort verwendete (mit networkCredential) bekomme ich nicht an die DirectoryServices gekoppelt.
Ich bin kein absoluter Spezi, bitte habt Nachsicht falls ich hier irgendetwas stümperhaft ausgedrückt habe.
Vielen Dank im Vorraus!
mfg HeikoPS: Falls es eine (freie oder kommerzielle) Bibliothek geben sollte, die mein Problem löst, bin ich auch für Tipps dankbar. Denke dabei an ChilKat, aber weiss nicht recht ob das wirklich funzt.
Antworten
-
Hallo Heiko,
also Beispiele, wie man das umsetzt, waren ja schon durch einige (von anderen jetzt auch wiederholte) Links gegeben. Aber vielleicht noch weitere:
[Cool Solutions: Using .NET C# LDAP Library]
[Re: Active Directory "login" from C# application]
Bereits von mir gepostet: [eDirectory Authentication using LdapConnection and custom certificate validation]Wo man sonst ja leicht auch mal Fehler machen kann, bzw. was nicht immer gleich intuitiv ist, ist die Query Syntax:
[LDAP Query Basics] / [Search Filter Syntax (Windows)]
ciao Frank- Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:40
-
wie ich die bestehende LdapConnection dann nutzen kann
scheint üblich wie:
using connection { connection.Bind() ...use Directory... }http://www.codeproject.com/KB/system/eDirectoryAuthentication.aspx
- Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:41
Alle Antworten
-
Hallo Heiko,
Für LDAPS ist es in vielen Fällen besser, über die [LdapConnection] zuzugreifen (nicht DirectoryEntry), wobei man speziell darauf achten sollte, die SecureSocketLayer - Eigenschaft auf true zu setzen (sonst findet kein LDAPS statt). Hier besteht u.a. die Möglichkeit, das Zertifikat selber zu validieren.
Für Details siehe u.a. auch: [Authentication using LdapConnection and custom certificate validation]
ciao Frank -
Hallo Frank,
vielen Dank für die Info.
Hast du evtl. noch andere weiterführende Links wo ich mich belesen kann, ich komme nicht so recht weiter wie ich die bestehende LdapConnection dann nutzen kann falls sie denn einmal steht.
Vielleicht stelle ich mich nur zu dusslig an, keine Ahnung. Will keinesfalls eine fertige Lösung von dir oder jemand anderem hier gepostet haben, ein oder zwei weiterführende Links sollten reichen um mir selbst auf die Sprünge helfen.Oder muss ich alles über DirectoryResponse / DirectoryRequest abwickeln? Kam ich grad eben drauf, aber bin unsicher ob das der richtige Weg ist...
Heiko
-
wie ich die bestehende LdapConnection dann nutzen kann
scheint üblich wie:
using connection { connection.Bind() ...use Directory... }http://www.codeproject.com/KB/system/eDirectoryAuthentication.aspx
- Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:41
-
Hallo Heiko,
also Beispiele, wie man das umsetzt, waren ja schon durch einige (von anderen jetzt auch wiederholte) Links gegeben. Aber vielleicht noch weitere:
[Cool Solutions: Using .NET C# LDAP Library]
[Re: Active Directory "login" from C# application]
Bereits von mir gepostet: [eDirectory Authentication using LdapConnection and custom certificate validation]Wo man sonst ja leicht auch mal Fehler machen kann, bzw. was nicht immer gleich intuitiv ist, ist die Query Syntax:
[LDAP Query Basics] / [Search Filter Syntax (Windows)]
ciao Frank- Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:40
-
Hallo Heiko
Ich habe gerade ähnliche Probleme wie du gehabt hast. Da es ja bei Dir dazumal funktioniert hat, würde mich schon interessieren, was es dazu gebraucht hat. Hat es mit DirectoryEntry funktioniert, oder schliesslich nur mit
System.DirectoryServices.Protocols.LdapConnection
?Vielen Dank schon mal.
-
Hallo Bruno.
Ich habe die komplette Lösung auf SDS.Protocols aufgebaut.
Hat zwar recht lange gedauert, da es kaum Literatur gibt, aber am Ende läuft alles recht zuverlässig.
Wichtig ist, die Grundlagen zu verstehen. Die findest du im Dokument "Introduction to System.DirectoryServices.Protocols (S.DS.P)" auf MSDN. Ansonsten die Links hier im Thread checken. Viel mehr hatte ich auch nicht.
Gruss Heiko
-
Hallo Heiko
Danke für den Input. Inzwischen hab ich's auch hingekriegt - mit S.DS.Protocols. Entscheidend war, dass auf die Überprüfung des Serverzertifikats mit einer Callbackfunktion reagiert werden kann. So kann selbst entschieden werden, ob überhaupt und mit welchem Zertifikat verglichen wird. Die Anwendung von S.DS.P ist aber um einiges mühsamer als mit S.DS, da bspw. bei einem Change eines Attributs zuerst überprüft werden muss, ob es schon existiert, und dann entweder ein Add oder Modify gemacht werden muss.
Gruss Bruno