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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    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 averti
    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
    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 chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    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 averti
    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
    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 : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    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

+ 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