IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Comment récupérer les groupes sur Active Directory dont l'utilisateur fait partie ?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Comment récupérer les groupes sur Active Directory dont l'utilisateur fait partie ?
    Bonjour à tous ,

    J'ai quelques soucis concernant VB et Active Directory :
    Tout d'abord, j'ai crée un formulaire d'authentification pour sécuriser mon application. L'utilisateur doit alors s'identifier avant de pouvoir accéder à mon application. Je commence alors par me connecter (LDAP) et j'effectue une recherche Active Directory qui ne fonctionne pas ! En faite, j'aimerais récupérer les groupes dans lequel l'utilisateur figure et SI le groupe = "Admin_AII" ALORS .... SINON ....

    Si quelqu'un connait des sources à ce sujet (j'ai déjà lu le cours de Thomas Lebrun...) ou peut m'éclairer ça serait vraiment cool

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
        Public Sub rechercheGroupeAuth()
            Dim group As String
            Dim Ldap As DirectoryEntry
     
            '************CONNEXION LDAP *******************'
            'Connexion LDAP avec les entrées utilisateur'
            Ldap = New DirectoryEntry("LDAP://...", Me.UsernameTextBox.Text, Me.PasswordTextBox.Text)
            Try
                Dim connect As Object = Ldap.NativeObject
                'Affichage des erreurs windows à l'utilisateur'
            Catch Ex As Exception
                MessageBox.Show(Ex.Message)
            End Try
     
            ' ********* Recherche des groupes sur active directory *********'
            Dim searcher As DirectorySearcher = New DirectorySearcher(Ldap)
            'On cherche les groupes d'active directory dans le domaine de l'utilisateur contenu dans Ldap'
            searcher.Filter = "(objectClass=group)"
            Try
                '** Recherche de tous les groupes avec la fonction FindAll() **'
                For Each result As SearchResult In searcher.FindAll
                    '** Récupération des groupes recherchés **'
                    Dim DirEntry As DirectoryEntry = result.GetDirectoryEntry
                    '** group contient tous les groupes trouvés sur active directory **'
                    If Not (DirEntry.Properties("cn").Value Is Nothing) Then
                        group = DirEntry.Properties("cn").Value.ToString()
                    Else
                        group = String.Empty
                    End If
                    '** Si l'utilisateur fait partie du groupe admin_AII alors ouverture appli **'
                    If group = "ADMIN_AII" Then
                        Fond.BPLocauxCreation.Visible = False
                        Fond.MessageAvertissement.Visible = True
                        Fond.BPMaterielCreation.Visible = False
                        Fond.BPProgCreation.Visible = False
                        Fond.CBLocauxCreation.Visible = False
                        Fond.CBMaterielCreation.Visible = False
                        Fond.CBProgCreation.Visible = False
                    Else
                        Fond.MessageAvertissement.Visible = False
                        Fond.BPLocauxCreation.Visible = True
                        Fond.BPMaterielCreation.Visible = True
                        Fond.BPProgCreation.Visible = True
                        Fond.CBLocauxCreation.Visible = True
                        Fond.CBMaterielCreation.Visible = True
                        Fond.CBProgCreation.Visible = True
                    End If
                Next
                '** Affichage des erreurs Windows**'
            Catch Ex As Exception
                MessageBox.Show(Ex.Message)
            End Try
            '** Libère les ressources
            ' Ldap.Close()
            ' Ldap.Dispose()
        End Sub
    Merci d'avance .....

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Bonjour,

    Je ne sais pas si tu sais comment on fait pour faire des requêtes LDAP :
    Voici un tuto en C# :
    http://morpheus.developpez.com/addotnet/ADCSharp/

    Tu peux le traduire en vb avec ca :
    http://convertisseur.developpez.com/converter.aspx
    ou ca :
    http://www.developerfusion.com/tools.../csharp-to-vb/

    Et pour ta question, elle a déjà été traité sur le forum vb.net :
    http://www.developpez.net/forums/d55...-requete-ldap/

    Bonne journée a toi et a bientôt sur le forum.

    ps : n'oublie pas le flag résolu

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par wakan Voir le message

    ps : n'oublie pas le flag résolu
    Oui je le ferais quand mon problème sera résolu ...
    et ce n'est pas le cas du tout ! lol

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Qu'est ce qui te manque pour faire ce que tu veux avec ce que je t'es donné ?

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par wakan Voir le message
    Qu'est ce qui te manque pour faire ce que tu veux avec ce que je t'es donné ?
    J'ai repris le code VB 2005 du sujet "Récupérer le groupe d'un utilisateur par requête LDAP " que tu m'avais suggéré...
    Cependant j'ai une erreur exception :
    Le filtre de recherche (&(objectClass=User)(SAMAccountName=i0042700) n'est pas valide
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
        Public Sub rechercheGroupeAuth()
            Dim searcher As DirectorySearcher = Nothing
            Dim colEntry As New Collections.Generic.List(Of String)
            'Objet de notre utilisateur de la hiérarchie Active Directory.
            searcher = New DirectorySearcher(New DirectoryEntry("LDAP://QTYSADS01.pharma.aventis.com", Me.UsernameTextBox.Text, Me.PasswordTextBox.Text))
            Try
     
                'On va chercher ici un objet de type user et dont le nom d'ouverture de session = <username>.
                searcher.Filter = String.Concat("(&(objectClass=User) (sAMAccountName=" + Me.UsernameTextBox.Text + ")")
                'Ne récupère que la propriété MemberOf.
                searcher.PropertiesToLoad.Add("MemberOf")
                'Recherche et retourne la première entrée trouvée.
                Dim result As SearchResult = searcher.FindOne
                'Parcours le contenu de la propriété MemberOf de notre entrée trouvée.
                For i As Integer = 0 To result.Properties("MemberOf").Count - 1
                    'Récupère la chaine LDAP.
                    Dim sProp As String = result.Properties("MemberOf")(i)
                    'Extrait le nom du groupe de la chaine.
                    colEntry.Add(sProp.Substring(3, sProp.IndexOf(",") - 3))
                    '** Si l'utilisateur fait partie du groupe admin_AII alors ouverture appli **'
                    If colEntry.ToString = "ADMIN_AII" Then
                        Fond.BPLocauxCreation.Visible = False
                        Fond.MessageAvertissement.Visible = True
                        Fond.BPMaterielCreation.Visible = False
                        Fond.BPProgCreation.Visible = False
                        Fond.CBLocauxCreation.Visible = False
                        Fond.CBMaterielCreation.Visible = False
                        Fond.CBProgCreation.Visible = False
                    Else
                        Fond.MessageAvertissement.Visible = False
                        Fond.BPLocauxCreation.Visible = True
                        Fond.BPMaterielCreation.Visible = True
                        Fond.BPProgCreation.Visible = True
                        Fond.CBLocauxCreation.Visible = True
                        Fond.CBMaterielCreation.Visible = True
                        Fond.CBProgCreation.Visible = True
                    End If
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
     
                'Libère les ressources.
     
                searcher.Dispose()
     
            End Try
        End Sub

    Merci de m'aider.

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Hello,
    ton code n'a rien à voir avec le post posté ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
       Dim adoConnection As ADODB.Connection
        Dim adoCommand As ADODB.Command
        Dim adoRecordset As ADODB.Recordset
        Dim strBase, strFilter, strAttributes, strQuery As String
        Dim listGroups() As Variant
        Dim i As Integer
     
        'Initialisation des objets ADO
        Set adoCommand = New ADODB.Command
        Set adoConnection = New ADODB.Connection
        Set adoRecordset = New ADODB.Recordset
     
        adoConnection.Provider = "ADsDSOObject"
        adoConnection.Open "Active Directory Provider"
        adoCommand.ActiveConnection = adoConnection
     
        'Recherche du domaine Active Directory
        strBase = "<LDAP://dc=domaine;dc=fr>"
     
        'Filtre sur l'utilisateur
        strFilter = "(&(objectCategory=user)(samAccountName=" & login & "))"
     
        'On récupère l'ensemble des groupes de l'utilisateur 
        strAttributes = "memberOf"
     
        'Construction de la requête LDAP
        strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
        adoCommand.CommandText = strQuery
        adoCommand.Properties("Page Size") = 300
        adoCommand.Properties("Timeout") = 30
        adoCommand.Properties("Cache Results") = False
     
        'Exécution de la requête
        Set adoRecordset = adoCommand.Execute
     
        'Parcours des résultats de la requête 
        Do Until adoRecordset.EOF
     
            'On stocke l'ensemble des groupes dans un tableau de variants
            listGroups = adoRecordset.Fields("memberOf").Value
     
            'Pour chaque élément du tableau
            For i = 0 To UBound(listGroups)
                Dim chaine_groupe As Variant
                Dim groupTmp As String
     
                chaine_groupe = listGroups(i)
                'On extrait la donnée qui nous intéresse (le nom exact du groupe)
                groupTmp = Mid(chaine_groupe, InStr(chaine_groupe, "CN=") + 3, InStr(chaine_groupe, ",OU=") - 4)
                MsgBox groupTmp
     
            Next
     
            ' Move to the next record in the recordset.
            adoRecordset.MoveNext
        Loop
     
        ' Clean up.
        adoRecordset.Close
        adoConnection.Close

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Hello,
    ton code n'a rien à voir avec le post posté ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
       Dim adoConnection As ADODB.Connection
        Dim adoCommand As ADODB.Command
        Dim adoRecordset As ADODB.Recordset
        Dim strBase, strFilter, strAttributes, strQuery As String
        Dim listGroups() As Variant
        Dim i As Integer
     
        'Initialisation des objets ADO
        Set adoCommand = New ADODB.Command
        Set adoConnection = New ADODB.Connection
        Set adoRecordset = New ADODB.Recordset
     
        adoConnection.Provider = "ADsDSOObject"
        adoConnection.Open "Active Directory Provider"
        adoCommand.ActiveConnection = adoConnection
     
        'Recherche du domaine Active Directory
        strBase = "<LDAP://dc=domaine;dc=fr>"
     
        'Filtre sur l'utilisateur
        strFilter = "(&(objectCategory=user)(samAccountName=" & login & "))"
     
        'On récupère l'ensemble des groupes de l'utilisateur 
        strAttributes = "memberOf"
     
        'Construction de la requête LDAP
        strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
        adoCommand.CommandText = strQuery
        adoCommand.Properties("Page Size") = 300
        adoCommand.Properties("Timeout") = 30
        adoCommand.Properties("Cache Results") = False
     
        'Exécution de la requête
        Set adoRecordset = adoCommand.Execute
     
        'Parcours des résultats de la requête 
        Do Until adoRecordset.EOF
     
            'On stocke l'ensemble des groupes dans un tableau de variants
            listGroups = adoRecordset.Fields("memberOf").Value
     
            'Pour chaque élément du tableau
            For i = 0 To UBound(listGroups)
                Dim chaine_groupe As Variant
                Dim groupTmp As String
     
                chaine_groupe = listGroups(i)
                'On extrait la donnée qui nous intéresse (le nom exact du groupe)
                groupTmp = Mid(chaine_groupe, InStr(chaine_groupe, "CN=") + 3, InStr(chaine_groupe, ",OU=") - 4)
                MsgBox groupTmp
     
            Next
     
            ' Move to the next record in the recordset.
            adoRecordset.MoveNext
        Loop
     
        ' Clean up.
        adoRecordset.Close
        adoConnection.Close
    Il s'agit du deuxième code qu'a posté cette personne que j'ai utilisé !! car celui que tu me donnes je ne crois pas que ce soit du VB 2005 si?! Je croyais que c'était du VBA excel... Je ne connais pas ADODB.command etc ...
    Peux tu m'éclairer ?

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Ce code est bien le deuxième posté par KrusK dans son post "Récupérer le groupe d'un utilisateur par requête LDAP".
    Mis à part ca, ce que tu ne connais pas, tu le cherches : MSDN + nom de la commande cherchée.
    Je ne peux te faire un cours sur ado... il y en a dans la partie cours du site...

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Re...
    Alors j'ai réussi à utiliser le code en VBA en ajoutant la référence Microsoft Active X Data Objects ... Librairy.

    Je vous remercie tous pour vos réponses...

    Il me reste encore à améliorer le code afin que le mot de passe de l'utilisateur soit pris en compte pour l'ouverture de l'application...

    Je repasse si je n'y arrive pas !


    .... PROBLEME RESOLU ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2012, 22h17
  2. Comment Récupérer les données sur un disque amovible
    Par mimi_01 dans le forum Composants
    Réponses: 0
    Dernier message: 06/05/2009, 20h09
  3. Réponses: 6
    Dernier message: 10/10/2007, 12h28
  4. Comment récupérer les coordonnées sur le bureau d'une form ?
    Par fma2112 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 22/02/2006, 23h43
  5. Comment lister les objets d'Active Directory ?
    Par fbalien dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/01/2006, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo