En C #, comment accéder à Active Directory pour obtenir la liste des groupes auxquels appartient un utilisateur donné?

En C #, comment puis-je accéder à Active Directory pour obtenir la liste des groupes auxquels appartient un utilisateur donné?

Les détails de l’utilisateur sont sous la forme:

"MYDOMAIN\myuser" 

J’ai suivi les instructions à partir d’ici, mais elles ne fonctionnent que si j’ai les détails de l’utilisateur sous la forme:

 "LDAP://sample.com/CN=MySurname MyFirstname,OU=General,OU=Accounts,DC=sample,DC=com" 

Alors peut-être que ce que je demande, c’est comment aller du premier, plus court, au formulaire complet ci-dessous?

Merci beaucoup!

Cela pourrait aider …

 using System.Collections; using System.DirectoryServices; ///  /// Gets the list of AD groups that a user belongs to ///  /// The login name of the user (domain\login or login) /// A comma delimited list of the user's AD groups public static SortedList GetADGroups(ssortingng loginName) { if (ssortingng.IsNullOrEmpty(loginName)) throw new ArgumentException("The loginName should not be empty"); SortedList ADGroups = new SortedList(); int backSlash = loginName.IndexOf("\\"); ssortingng userName = backSlash > 0 ? loginName.Subssortingng(backSlash + 1) : loginName; DirectoryEntry directoryEntry = new DirectoryEntry(); DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry, "(sAMAccountName=" + userName + ")"); SearchResult searchResult = directorySearcher.FindOne(); if (null != searchResult) { DirectoryEntry userADEntry = new DirectoryEntry(searchResult.Path); // Invoke Groups method. object userADGroups = userADEntry.Invoke("Groups"); foreach (object obj in (IEnumerable)userADGroups) { // Create object for each group. DirectoryEntry groupDirectoryEntry = new DirectoryEntry(obj); ssortingng groupName = groupDirectoryEntry.Name.Replace("cn=", ssortingng.Empty); groupName = groupName.Replace("CN=", ssortingng.Empty); if (!ADGroups.ContainsKey(groupName)) ADGroups.Add(groupName, groupName); } } return ADGroups; } 

En fin de compte, j’ai dû l’aborder sous l’angle opposé car je devais valider les membres d’une forêt séparée (de confiance). Alors voici le code pour trouver la liste des membres d’un groupe donné:

 ///  /// Finds the users in the given group. Eg groupName=My-Group-Name-Blah /// returns an array of users eg: DOMAIN\user ///  ssortingng[] UsersInGroup(ssortingng groupName) { List users = new List(); // First, find the group: ssortingng query = ssortingng.Format("(CN={0})", groupName); SearchResult searchResult = new DirectorySearcher(query).FindOne(); DirectoryEntry group = new DirectoryEntry(searchResult.Path); // Find all the members foreach (object rawMember in (IEnumerable)group.Invoke("members")) { // Grab this member's SID DirectoryEntry member = new DirectoryEntry(rawMember); byte[] sid = null; foreach (object o in member.Properties["objectSid"]) sid = o as byte[]; // Convert it to a domain\user ssortingng try { users.Add( new SecurityIdentifier(sid, 0).Translate(typeof(NTAccount)).ToSsortingng()); } catch { } // Some SIDs cannot be discovered - ignore these } return users.ToArray(); }