我们有一家名为'X'的公司,并使用Active Directory维护其用户。'X'已经收购了一家公司'Y'和'Y'有自己的AD。 Y 中的用户可以在 X 中添加为群组成员。
在整个组织(X + Y)中搜索属于 Y AD的用户时,我们可以从 Y 只。但我们需要检查用户是否是 X AD中任何组中的成员,如果存在,我们需要获取用户详细信息。
在这种情况下,有人可以提供帮助...... :)
答案 0 :(得分:0)
终于得到了答案..
使用tokengroup时,我们只能从一个AD中检索用户。 而是让用户的组使用和获取内部组搜索再次获得的组.Below是执行该操作的片段....谢谢
DirectorySearcher user_search1 = new DirectorySearcher(new DirectoryEntry(ldap_root1));
user_search1.Filter = String.Format("(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(objectCategory=user)(samaccountname={0}))", alias);
user_search1.SearchScope = SearchScope.Subtree;
user_search1.PropertiesToLoad.Add("memberOf");
user_search1.PropertiesToLoad.Add("objectSid");
user_search1.PropertiesToLoad.Add("userprincipalname");
SearchResult user_result1 = user_search1.FindOne();
DirectoryEntry entry1 = new DirectoryEntry(user_result1.Path);
foreach (var grp in entry1.Properties["memberOf"])
{
groupnames1.Append(((grp.ToString().Split('=')[1].Split(',')[0])));
groupnames1.Append(";");
DirectorySearcher Groupsearch = new DirectorySearcher(new DirectoryEntry(ldap_root1));
Groupsearch.Filter = String.Format("(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(objectCategory=group)(samaccountname={0}))", ((grp.ToString().Split('=')[1].Split(',')[0])));
Groupsearch.SearchScope = SearchScope.Subtree;
Groupsearch.PropertiesToLoad.Add("memberOf");
SearchResult group_result1 = Groupsearch.FindOne();
if (group_result1 != null)
{
DirectoryEntry group1 = new DirectoryEntry(group_result1.Path);
//group1.RefreshCache(new string[] { "tokenGroups" });
//groupnames = null;
foreach (var grp1 in group1.Properties["memberOf"])
{
groupnames1.Append(((grp1.ToString().Split('=')[1].Split(',')[0])));
groupnames1.Append(";");
}
}
}
return groupnames1.ToString().Substring(0, groupnames1.Length - 1);