Probleme bei Zugriff auf LDAP

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von AndPod.

    Probleme bei Zugriff auf LDAP

    Hallo alle zusammen.
    Ich bemühe mich schon seit einiger Zeit, via VB Zugriff auf ein LDAP zu bekommen:

    VB.NET-Quellcode

    1. Dim strBenutzer As String = "cn=MaxPumpelhuber"
    2. Dim strPasswort As String = "1234"
    3. Dim strHost As String = "xxxx.xxxx.xxxxx.xxxxx.de"
    4. Dim strPort As String = "20414"
    5. Dim strSuchbasis As String = "ou=xxxx,ou=interface,o=applications,c=de"
    6. Dim ldapCon As LdapConnection = New LdapConnection(String.Concat(strHost, ":", strPort))
    7. Dim networkCreds As NetworkCredential = New NetworkCredential(strBenutzer, strPasswort, strSuchbasis)
    8. ldapCon.AuthType = AuthType.Negotiate
    9. ldapCon.Bind(networkCreds)


    In der letzten Zeile kommt dann immer der Fehler "Der LDAP-Server ist nicht verfügbar", was mit Sicherheit daran liegt, dass der Zugriff nur per SSL/Zertifikat erfolgen kann. Zumindest muss ich ein entsprechendes Zertifikat bestätigen wenn ich mit Apache Directory Studio auf das LDAP zugreifen will (und hier funktioniert es auch mit den Daten, die stimmen also).
    Ich hab zwar fleißig Google benutzt, aber nur Lösungen in C# gefunden. Und gerade was die Zertifikatsgeschichte betrifft bin ich da sehr ins stocken geraten.

    Vielleicht kann mir einer von euch weiterhelfen.

    MfG André
    Direkt bei deinem LDAP Problem kann ich dir nicht helfen, ich müsste ebenfalls gockeln -> und finde dazu auch eine Menge Beiträge...

    Aber das Thema "nur in C# gefunden" würde ich kurz aufgreifen. Du kannst jeden C#-Snippet in VB.NET konvertieren und umgekehrt.
    Dafür verwendet ich immer den Telerik Converter. Einfach zu bedienen und sollte dir - sofern C# dich bis jetzt am Vorankommen gehindert hat - helfen.


    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Hallo,

    ich hatte intern noch mit einem anderen Entwickler gesprochen. Der konnte mir zwar nicht mit der Lösung helfen, meinte aber das es keine Zertifikatsgeschichte ist.
    Ich habe auch andere Varianten probiert, es ändert nichts am Ergebnis.
    Zum testen meiner Zugangsdaten benutze ich das ApacheDirectoryStudio. Dort klappt der Zugriff. Hier ein weiteres Code-Beispiel, welches ich versucht habe:
    (abgewandelt von stackoverflow.com/questions/12…-with-a-username-not-a-cn)

    VB.NET-Quellcode

    1. Dim strBenutzer As String = "cn=MaxPumpelhuber"
    2. Dim strPasswort As String = "1234"
    3. Dim strHost As String = "xxxx.xxxx.xxxxx.xxxxx.de"
    4. Dim strPort As String = "20414"
    5. Dim strSuchbasis As String = "ou=xxxx,ou=interface,o=applications,c=de"
    6. Dim strRoot As String = "LDAP://" & strHost & ":" & strPort & "/" & strSuchbasis
    7. Dim deRoot As New DirectoryEntry(strRoot)
    8. deRoot.AuthenticationType = AuthenticationTypes.SecureSocketsLayer
    9. deRoot.Password = strPasswort
    10. deRoot.Username = strBenutzer
    11. Dim dsFindUser As New DirectorySearcher(deRoot)
    12. dsFindUser.SearchScope = DirectoryServices.SearchScope.Subtree
    13. dsFindUser.PropertiesToLoad.Add("sn")
    14. dsFindUser.PropertiesToLoad.Add("givenName")
    15. dsFindUser.Filter = String.Format("((sn={0})", "Pumpelhuber")
    16. Dim result As SearchResult = dsFindUser.FindOne


    In der letzten Zeile kommt auch hier "Der LDAP-Server ist nicht verfügbar"
    Ich finde deinen "LDAP"-String (keine Ahnung wie man das Ding richtig nennt) merkwürdig, mir sind o und c nicht bekannt. Auch den Port finde ich merkwürdig, Standard ist eigentlich 389 und 636.
    Versuch mal folgendes:

    VB.NET-Quellcode

    1. Dim strBenutzer As String = "MaxPumpelhuber" ' samAccountName oder UPN
    2. Dim deRoot As New DirectoryEntry("LDAP://ad.example.com/ou=xxxx,ou=interface,ou=applications,dc=ad,dc=example,dc=com", strBenutzer, strPasswort)
    3. ' bzw
    4. Dim deRoot As New DirectoryEntry("LDAP://ad.example.com/ou=xxxx,ou=interface,ou=applications,dc=ad,dc=example,dc=com", strBenutzer, strPasswort, AuthenticationTypes.SecureSocketsLayer)
    Hallo
    Schau dir das Anmelden nochmal genau an. NetworkCredential-Konstruktor: (String, String, String)
    Der UserName wäre meiner Meinung nach "MaxPumpelhuber" und nicht "cn=MaxPumpelhuber".
    Und der dritte Parameter wäre die Domäne.
    Gruss HenryV

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HenryV“ ()

    slice schrieb:

    mir sind o und c nicht bekannt
    Gültig sind sie, aber zumindest o ist hier eigentümlich verwendet, jedoch liegt das wohl daran, dass die Datenstruktur nicht in die übliche LDAP-Verwendung passt.
    zytrax.com/books/ldap/ape/#attributes
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,
    erstmal danke für die Rückmeldung. Wie oben erwähnt, die Anmeldedaten stimmen. Ich teste es mit genau diesen im ApacheDirectoryStudio. Da gebe ich den Hostnamen an (die URL), den Port (20414) und wähle SSL Verschlüsselung aus. Bei der Suchbasis gebe ich auch den Inhalt meiner Variable an. Der Benutzername wurde mir genauso mitgeteilt (cn=...) und funktioniert auch. Ich bekomme auch bei der Suche die passenden Ergebnisse, die einzelnen Daten stimmen also alle.

    Ich muss mich aber korrigieren, bei der Fehlermeldung bekomme ich den Hinweis:
    System.Runtime.InteropServices.COMException - Der Server ist nicht funktionstüchtig.


    PS: Die Meldung kommt auch bei dem Vorschlag von @slice