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

VB.NET Discussion :

Groupe utilisateur LDAP ! (VB.net)


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Groupe utilisateur LDAP ! (VB.net)
    Bonjour,
    Pour une application, j’ai besoin de récupérer le groupe utilisateur de la session Windows.
    GetUtilisateurGroups(Environment.UserName) {pas le nom de domaine lui je le connais!} affin d’enrichir ma table Gestion de droits dans ma base de données SQL serveur !

    L’idée étant de pouvoir autoriser tel ou tel utilisateur à tout ou partie du programme !

    L’utilisateur ouvre l’application, celle ci va lire dans le LDAP son groupe utilisateur ! Si l’utilisateur est connu, l’application affiche les menus qui le concernent, et masque ceux qui ne le concernent pas ! Il n’est pas question d’énumérer les utilisateurs, mais bien d’identifier l’utilisateur de la session !

    je recherche des lien, de tutoriel et bien avidement de conseils!

    D’avance merci !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Tu veux quoi exactement :

    - Obtenir les groupes auxquels appartient l'utilisateur de la session en cours ?

    ou

    - Obtenir le nom d'utilisateur de la session en cours ?

    ----------------------------------------------------------------------------------------------------------

    Je souhaite intervenir sur un point qui me déplaît lorsque quelqu'un dit obtenir le nom de l'utilisateur de la session en cours en mettant ceci dans son programme :

    C'est FAUX !!!!

    Partant du principe que l'application est exécutée avec le fichier Manifest paramétré sur "AsInvoker", Le nom retourné par la variable est bon.

    Partons du principe que l'application est exécutée sur une session utilisateur avec le fichier Manifest paramétré sur "RequireAdministrator", le nom retourné par la variable ne sera pas le nom de l'utilisateur en cours de session mais celui du compte administrateur qui a fait l'objet de l'élévation !


    Donc selon l'un ou l'autre cas de figure, le nom sera correctement retourné en utilisant cette fonction :

    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
     
            Public Shared Function GetUserName() As String
                Dim buffer As IntPtr = IntPtr.Zero
                Dim count As UInteger = 0
                Dim userName As String = String.Empty
                Try
                    Dim sessionId = WTSGetActiveConsoleSessionId()
                    WTSQuerySessionInformation(IntPtr.Zero, sessionId, WTS_INFO_CLASS.WTSUserName, buffer, count)
                    userName = Marshal.PtrToStringAnsi(buffer).Trim()
                Catch ex As Exception
                Finally
                    WTSFreeMemory(buffer)
                End Try
                Return userName
            End Function
     
            <DllImport("kernel32.dll")>
            Private Shared Function WTSGetActiveConsoleSessionId() As UInteger
            End Function
     
            <DllImport("Wtsapi32.dll")>
            Private Shared Function WTSQuerySessionInformation(hServer As System.IntPtr, sessionId As UInteger, wtsInfoClass As WTS_INFO_CLASS, ByRef ppBuffer As System.IntPtr, ByRef pBytesReturned As UInteger) As Boolean
            End Function
     
            Private Enum WTS_INFO_CLASS
                WTSInitialProgram
                WTSApplicationName
                WTSWorkingDirectory
                WTSOEMId
                WTSSessionId
                WTSUserName '5
                WTSWinStationName
                WTSDomainName '7
                WTSConnectState
                WTSClientBuildNumber
                WTSClientName
                WTSClientDirectory
                WTSClientProductId
                WTSClientHardwareId
                WTSClientAddress
                WTSClientDisplay
                WTSClientProtocolType
                WTSIdleTime
                WTSLogonTime
                WTSIncomingBytes
                WTSOutgoingBytes
                WTSIncomingFrames
                WTSOutgoingFrames
                WTSClientInfo
                WTSSessionInfo
            End Enum
    A+

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour wallace1 et bonjour le forum,

    merci pour ta réponse, mais ce n'est pas ce qui m’intéresse!

    je veux que par apprentissage, connaitre tous les droits d'un utilisateur.

    l'administrateur réseau attribut des droits , une adresse mail et configure un ordinateur pour chaque nouveau arrivant. il ce charge également d'installer les applicatif sur la machine des utilisateur.

    mon programme s'adresse à un panel d'utilisateur dons tout ou parti lui est destine! l'idée étant d'affecter une configuration minimal. à charge au chef de service de déverrouiller tel ou tel fonctionnalités!

    je dois récupérer le UserName, le groupe utilisateur, le nom de la machine connectée ainsi que son adresse Mac!

    afin de réduire les droits aux groupe et/ou l'utilisateur et/ou la machine ; ainsi l'utilisateur 1 du groupe 1 de la machine 1 accédé à la fonction (1,2,3,4) alors qu'il ne dispose que de (1,2) sur la machine 2

    le groupe 2 les fonction (123456789) l'utilisateur 2 fonction (2,4,6,8) la machine 1 pour cette utilisateur la fonction(2,4) alors que pour la machine 2 fonction(2).

    encore merci pour ton aide.

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Pas de problème

    Premier point et c'est une affirmation, c'est bien l'administrateur système (et pas l'admin réseau) qui se charge de créer les utilisateurs et d'en modifier les propriétés de compte via l'Active Directory.
    Second point et ce sont des questions :
    - Côté serveur, l'administration se fait-elle en environnement Windows ?
    - ton programme doit il s'exécuter sur le serveur qui a été promu contrôleur de domaine (là où est installé l'Active Directory) ou depuis n'importe quel poste client ?
    - Tu dis que ton programme s'adressera à un panel d'utilisateurs ..... ils auront accès aux outils d'administration ???

    J'avoue ne pas bien comprendre à qui s'adressera ton programme, .... au risque de répondre une fois de plus à côté de la plaque j'attends tes éclaircissements car si ton programme s'exécute sur le dcpromo alors c'est assez simple de récupérer toutes les infos que tu demandes (noms d'utilisateurs, noms et @mac de machines connectées).... en référençant les assemblys "System.DirectoryServices" et "System.DirectoryServices.AccountManagement" ou en usant du pInvoke :

    http://stackoverflow.com/questions/1...tive-directory
    http://www.morgantechspace.com/2014/...n-C-Sharp.html
    https://www.codeproject.com/Articles...er-names-using
    ....aso....

    A+

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour toutes ces précisions,, oui c'est l'administrateur système qui configure l'actif directory et qui affecte l'utilisateur à un groupe.

    Dans ses package d' installation il choisi le profile bureautique,technicien,administratif ou que sais je pour installer les applicatifs.

    C'est la que j'interviens, a sa première utilisation l'utilisateur lambda n'est pas connue dans la base de données. L'application récence toutes les informations utiles et en fonction de son profile dans l'actif directory se retrouve avec l'accès à certaines fonctionnalités et pas d'autres, l'apprentissage permet dans le temps une configuration quasi automatique!

    Prenons un exemple: Un commercial prospect, il a son ihm de prospection;
    Une commande est passé on entre dans un logique de production (etude,achats,fabrication),livraison;

    On arrive aux statistiques, nous pouvons tracer le processus de A a Z le tout dans le même ERP; même base de données même application mais pas le même niveau de confidentialité.

    Actuellement je trouve le username le nom de la machine et le sid du groupe utilisateur mais c'est moins parlant qu'administrateur par exemple!

    Maintenant si l'application doit interroger le LDAP en administrateur c'est pasun problème.
    Dernière modification par Invité ; 21/12/2016 à 21h17.

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    .....

    Dans ses package d' installation il choisi le profile bureautique,technicien,administratif ou que sais je pour installer les applicatifs.
    Il mets en place une GPO pour déployer une application tout simplement, non mais c'est quoi ces profiles bureautique&Co ???? ......

    Citation Envoyé par dysorthographie Voir le message
    C'est la que j'interviens, a sa première utilisation l'utilisateur lambda n'est pas connue dans la base de données.
    Une BDD mais quelle BDD ?????

    L'application récence toutes les informations utiles
    Et c'est quoi ces informations exactement ?

    et en fonction de son profile dans l'actif directory se retrouve avec l'accès à certaines fonctionnalités et pas d'autres,
    Il n'y a pas de notions de profile dans l'AD, va falloir être plus précis sur ce à quoi tu penses.....?? Quelles fonctionnalités par exemple ?


    Citation Envoyé par dysorthographie Voir le message
    Prenons un exemple: Un commercial prospect, il a son ihm de prospection;
    Une commande est passé on entre dans un logique de production (etude,achats,fabrication),livraison;

    On arrive aux statistiques, nous pouvons tracer le processus de A a Z le tout dans le même ERP; même base de données même application mais pas le même niveau de confidentialité.
    Ton exemple n'est vraiment pas clair.....

  7. #7
    Invité
    Invité(e)
    Par défaut
    Nous avons un serveur de déploiement de windows avec de profile standard bureaux (Microsoft Offices par exemple), Cao (Catia,Autocad) etc ..

    Dans l'actif directory on trouve des groupes comme Administrateur, Administratif,Technicien etc...

    Chaque utilisateur est rattaché a un de ces groupes.

    La fini la partie administration système. J'ai développé depuis quinze ans un Erp qui gère tous le processus de production (en visual studio 6) à l'époque historiées dans une base de données Sql server!

    Ici il s'agit d'une migration vers Vb.net et d'évolution.
    Oui
    Je ne connais rien sur l'actif directory d'ou mon imprécision voir mes âneries!

    Ceci dit je trouve bien toutes mes informations quand j'interroge l'actif directory en fonction de l'utilisateur qui à ouvert l'allocation sauf que c'est le Sid du groupe utilisateur qui mes retourner et pas son nom comme Administrateur par exemple.

    https://fr.wikipedia.org/wiki/Security_Identifier
    Dernière modification par Invité ; 21/12/2016 à 22h07.

  8. #8
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Et bien voilà le projet est cadré, je ne comprenais pas l'histoire de cette BDD......

    Le wiki du SID c'était inutile ..

    breff....

    Ceci dit je trouve bien toutes mes informations quand j'interroge l'actif directory
    C'est Active Directory

    --> Voilà comment j'obtiens les noms des utilisateurs du domaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     Dim groupName As String = "Utilisateurs du domaine"
            Dim domainName As String = "dotdev.eu"
            Dim ctx As New PrincipalContext(ContextType.Domain, domainName)
            Dim grp As GroupPrincipal = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, groupName)
            If grp IsNot Nothing Then
                For Each p As Principal In grp.GetMembers(False)
                    MsgBox(p.SamAccountName)
                Next
                grp.Dispose()
                ctx.Dispose()
            End If
    --> A titre info pour retourner un nom depuis un SID :

    http://www.pinvoke.net/default.aspx/...okupAccountSid


    Qu'utilises-tu comme code pour interroger l'AD ? et surtout le fais-tu avec ton programme directement sur le DC ?

    ++

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour wallace1,

    Je te remercie pour ton aide,je te fais parvenir les débuts de routine que j'ai trouvé sur le web, il me faut faire un petit tri car pour l'instant c'est plus que brouillon je n'en suis qu'à la phase d'analyse et de faisabilité.

    Pour cadrer mieux le contexte,je dirais que nous sommes une entreprise constitués en closter, les moyens administratif et logistique sont mutualisés. Cela permet de regrouper plusieurs compétence au sein d'un même problème global. Chaque entreprises garde son indépendance mais s'inscrit dans un processus global.

    La base de données Sql sever mutualise les tranches de vie de chaque entreprise,pour partager ce qui peut et doit l'être avec les autres acteurs d'un même projet, tout en laissant l'autonome et une séparation étanche entre les partenaires!

  10. #10
    Invité
    Invité(e)
    Par défaut
    comme convenue voila 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
    Imports System.Security.PrincipalPublic
     Class MyProjet
      Public Sub New(ByRef Cn As Object, ByRef Menu As Object)
            Dim logonToken As IntPtr = LogonUser()
            Dim GRP As Object = GetGroups(logonToken)
            Dim UsName = UserName(logonToken)
      End Sub        
      Private Function LogonUser() As IntPtr
            Dim accountToken As IntPtr = WindowsIdentity.GetCurrent().Token
            Return accountToken
       End Function  
        Private Function GetGroups(ByVal logonToken As IntPtr) As List(Of String)
            Dim result As New List(Of String)
            Dim wi As WindowsIdentity = New WindowsIdentity(logonToken)
            For Each group As IdentityReference In wi.Groups
                Try
                    result.Add(group.Translate(GetType(NTAccount)).ToString())
                Catch ex As Exception
                End Try
            Next
            result.Sort()
            Return result
        End Function   
        Private Function UserName(ByVal logonToken As IntPtr)
            ' Construct a WindowsIdentity object using the input account token.
            Dim windowsIdentity As New WindowsIdentity(logonToken)
            Dim a = windowsIdentity.User
            Return (windowsIdentity.Name)
        End Function    
    End Class
    Édite:
    Ça fonctionne nickel, merci wallace1.
    Dernière modification par Invité ; 23/12/2016 à 14h35.

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

Discussions similaires

  1. ldapsearch lister les groupes d'un utilisateur ldap
    Par illegalsene dans le forum Administration système
    Réponses: 0
    Dernier message: 15/01/2014, 16h00
  2. Utilisateurs, groupes et roles asp.net
    Par jeanjean40 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/03/2011, 17h00
  3. [SUPERVISOR]Création de groupes utilisateurs avec superviseur
    Par leelee dans le forum Administration-Migration
    Réponses: 1
    Dernier message: 17/02/2007, 11h32
  4. Listage groupe Utilisateurs AD
    Par pinpin_du_net dans le forum Langage
    Réponses: 2
    Dernier message: 16/08/2006, 18h27
  5. [Sécurité] Selection utilisateur ldap
    Par anto48_4 dans le forum Langage
    Réponses: 13
    Dernier message: 24/03/2006, 14h31

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