Announcement

Collapse
No announcement yet.

LDAP Abfrage bei Windows Anwendung wie geht das ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LDAP Abfrage bei Windows Anwendung wie geht das ?

    Also bis jetzt habe ich nur mit ASP gearbeitet und soll jetzt neben ASP.Net auch Windows Anwendungen mit VB.NET programmieren
    Also bitte Leicht zu verstehende Antworten da ich Anfängerin bin und Englisch kann ich auch nicht besonders….;-)

    <br>
    - Danke -
    <br><br>
    Also ich habe das bis jetzt erstmal in ASP gemacht und bekomme das da schon hin
    Aber ich weiß einfach nicht wie ich das bei einer Windows Anwendung einbaue oder Abfrage…
    Welche Bibliotheken, Klasse ich da einbinden muss…
    <br><br>
    Also ich habe eine Windows Form Anwendung….
    Diese wird auf unseren Servern installiert und über Citrix Client von den Usern gestartet…
    (interne Firmenumgebung die Anwender haben keine eigenen PCs)
    <br><br>
    Als erstes fang ich den Domänen Login ab mit
    Dim Userlogon as String
    Userlogon = System.Environment.UserName
    <br>
    (Bei ASP: Userlogon = Request.ServerVariables("LOGON_USER") )
    <br><br>
    So jetzt möchte ich Abfragen in welcher Gruppe der User unter LDAP (Win Server 2003) ist<br><br>

    Ich habe meine Domäne und mein LDAP (wie gesagt das Grundprinzip kenne ich ja, ich das unter ASP Problem hinbekomme aber ASP kann man nicht einfach in Visual Basic. NET übernehmen)<br><br>

    Ich habe den User der die Berechtigung hat auf LDAP zuzugreifen
    (Entspricht nicht dem Benutzer der Anwendung):<br><br>

    username = "meine-domaen\internetlady"
    password = "123456"<br><br><br>

    <u>Ich habe mein Select zum lessen aller meiner Gruppen:</u><br>

    strContainer = "OU=Intranet,OU=Anwendungen,OU=Sicherheitsgrup pen"
    domaenenname = "DC= meine-domaen,DC=de"<br><br>

    "SELECT Name, CN FROM 'LDAP://" & strContainer & "," & domaenenname & "'" & _
    " WHERE objectClass ='group' ORDER BY Name "<br><br><br>

    <u>Dann mache ich noch so was (in ASP) ;-)
    Um je Gruppe die Mitglieder zu erhalten (Code gekürzt):</u><br>

    SET objRootDSE = GetObject("LDAP://rootDSE")
    SET oADSI = GetObject("LDAP:")

    FOR a = 0 TO anz_gruppen

    strGrpName = Trim(arr_gruppen(a,0))

    set objItem = oADSI.OpenDSObject("LDAP://cn=" & strGrpName & "," & strContainer & "," & objRootDSE.Get("defaultNamingContext"),username,pa ssword,1)

    FOR EACH obj IN objItem.Members

    IF Trim(obj.sAMAccountName) = Trim(Userlogon) THEN
    In_gruppe_mitglied = "J"
    usergesamtname = obj.cn
    END IF
    NEXT

    NEXT
    <br><br>
    <b>
    Aber wie sieht der Code in Visual Basic . NET aus ?
    Was muss ich bei dem Projekt einstellen damit das geht ?
    Welche “Datenverbindung“ muss man da nutzen (ist ja kein DB2 oder SQLServerDB der LDAP)?</b>

    Nadine

  • #2
    Hallo,

    in .NET ist der Namespace <b>System.DirectoryServices</b> für den Zugriff zuständig, wobei dem Projekt ein Verweis auf die Assembly <i>System.DirectoryServices.dll</i> hinzugefügt werden muss. Der Zugriff könnte dann zum Beispiel so aussehen:
    <code>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim oRoot As DirectoryEntry = New DirectoryEntry("LDAP://OSSISOFT.local")
    Dim oSearcher As DirectorySearcher = New DirectorySearcher(oRoot)
    Dim oResults As SearchResultCollection
    Dim oResult As SearchResult
    oResults = oSearcher.FindAll
    For Each oResult In oResults
    If Not oResult.GetDirectoryEntry().Properties("cn").Value = "" Then
    ListBox1.Items.Add(oResult.GetDirectoryEntry().Pro perties("cn").Value)
    End If
    Next
    End Sub
    </code>
    Um zu prüfen, in welchen Gruppen ein bestimmter Benutzer ist, könnte die Implementierung in VB.NET so aussehen:
    <code>
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim oRoot As DirectoryEntry = New DirectoryEntry("LDAP://CN=users,DC=OSSISOFT,DC=local")
    Dim oSearcher As DirectorySearcher = New DirectorySearcher(oRoot, "(sAMAccountName=Administrator)")
    Dim oResult As SearchResult
    oResult = oSearcher.FindOne
    If Not (oResult Is Nothing) Then
    Dim obUser As DirectoryEntry = New DirectoryEntry(oResult.Path)
    Dim obGroups As Object = obUser.Invoke("Groups")
    For Each ob As Object In DirectCast(obGroups, IEnumerable)
    Dim obGpEntry As DirectoryEntry = New DirectoryEntry(ob)
    ListBox1.Items.Add(obGpEntry.Name)
    Next
    End If
    End Sub
    </code&gt

    Comment

    Working...
    X