2010-09-07 8 views
1

J'utilise le code suivant, qui fonctionne, pour connecter un utilisateur à une application intégrée dans VB.NET par rapport au répertoire actif.Récupérer les informations utilisateur et vérifier si membre d'un groupe dans le répertoire actif en utilisant VB.NET

Ce code fonctionne très bien, mais j'ai besoin de récupérer le prénom, le nom de famille, le nom d'utilisateur et aussi vérifier si l'utilisateur fait partie d'un groupe.

J'ai essayé plusieurs formes de adResults.Property ("displayname"). ToString() et similaires, mais je n'arrive pas à le faire fonctionner correctement.

Quelqu'un at-il des idées pour faire ce que je cherche à faire?

Voici le code que j'utilise maintenant et merci d'avance.

Public Function ValidateActiveDirectoryLogin(ByVal sDomain As String, ByVal sUserName As String, ByVal sPassword As String) As Boolean 

    Dim bSuccess As Boolean = False 
    Dim adEntry As New System.DirectoryServices.DirectoryEntry("LDAP://" & sDomain, sUserName, sPassword) 
    Dim adSearcher As New System.DirectoryServices.DirectorySearcher(adEntry) 
    adSearcher.SearchScope = DirectoryServices.SearchScope.OneLevel 
    Try 
     Dim adResults As System.DirectoryServices.SearchResult = adSearcher.FindOne 
     bSuccess = Not (adResults Is Nothing) 
    Catch ex As Exception 
     bSuccess = False 
     MsgBox("Error") 
    End Try 

    Return bSuccess 

End Function 

Répondre

4

Examinez l'espace de noms System.DirectoryServices.AccountManagemment. L'objet userprincipal a tout ce dont vous avez besoin et plus encore. Here's an explanation sur l'utilisation de cette API.

EDIT: c'est vraiment beaucoup plus simple à utiliser. Jetez un oeil à cet exemple de code:

Dim userName = Environment.UserName 

' create a domain context 
Dim DC = New PrincipalContext(ContextType.Domain) 

' find a user in the domain 
Dim user = UserPrincipal.FindByIdentity(DC, userName) 

' get the user's groups 
Dim groups = user.GetGroups() 

' get the user's first and last name 
Dim firstName = user.GivenName 
Dim lastName = user.SurName 

' get the distinguishednames for all groups of the user 
Dim groupNames = From g in groups Select g.DistinguishedName 
' etc... 
+0

En effet qui est certainement plus que je suis Vous cherchez mais si c'est la seule façon d'obtenir ce dont j'ai besoin, je vais certainement y jeter un coup d'oeil mais y at-il de toute façon pour récupérer les informations de l'utilisateur de l'objet System.DirectoryServices.SearchResult? Ce serait bien de le garder aussi simple que possible. Merci =) – Tom

+0

@Tom c'est vraiment beaucoup plus simple à utiliser en fait, jetez un oeil à mon édition – jeroenh

+0

Wow, c'était facile. Merci. – Tom

0

..et pour vider rapidement le contenu de (de réponse noms de groupes brillaint de Jeroenh) dans une zone de liste:

ListBox1.DataSource = groupnames.ToList() 
Questions connexes