1
J'ai essayé la recherche LDAP ci-dessous, mais elle ne me donne que l'appartenance au groupe dans lequel se trouve l'utilisateur. J'ai besoin que la recherche inclue également les appartenances des groupes ForeignSecurityPrincipals (groupes sur un domaine dans une autre forêt AD).Comment puis-je obtenir les appartenances à un groupe pour un utilisateur AD, y compris tous les groupes d'autres domaines?
public static List<string> GetGroups()
{
List<string> oGroups = new List<string>();
string vLDAPPath = "GC://dc1.dom1.local/dc=dom1,dc=local";
string vFilterUser = string.Format("(&(objectcategory=user)(objectsid={0}))", "S-1-5-21-122767939-1938435020-1261837966-8097");
DirectoryEntry oDirEntry = new DirectoryEntry();
oDirEntry.Path = vLDAPPath;
oDirEntry.Username = "dom1\\sysuser";
oDirEntry.Password = "syspwd";
DirectorySearcher oDirSearchUser = new DirectorySearcher();
oDirSearchUser.SearchRoot = oDirEntry;
oDirSearchUser.Filter = vFilterUser;
SearchResult oSearchResultUser = oDirSearchUser.FindOne();
if (oSearchResultUser != null)
{
using (DirectoryEntry oResultDirEntryUser = oSearchResultUser.GetDirectoryEntry())
{
oResultDirEntryUser.RefreshCache(new string[] { "TokenGroups" });
PropertyValueCollection tg = oResultDirEntryUser.Properties["TokenGroups"];
foreach (byte[] SID in (Array)tg.Value)
{
string vFilterGroup = string.Format("(&(objectcategory=group)(objectsid={0}))", SIDToString(SID));
DirectorySearcher oDirSearchGroup = new DirectorySearcher();
oDirSearchGroup.SearchRoot = oDirEntry;
oDirSearchGroup.Filter = vFilterGroup;
SearchResult oSearchResultGroup = oDirSearchGroup.FindOne();
if (oSearchResultGroup != null)
{
using (DirectoryEntry oResultDirEntryGroup = oSearchResultGroup.GetDirectoryEntry())
{
oGroups.Add(oResultDirEntryGroup.Name);
}
}
}
}
}
return oGroups;
}