0

我对 ASP.NET 和 Active Directory 有疑问。

我想知道用户是否在 Active Directory 的 Groupe 中,如果他在这个 Group 中,他可以看到更多。为此,我编写了一个带有过滤字符串的函数。问题是在我们公司,我们切换了组并且结构不是静态的。为此,我首先搜索组,然后使用参数 member-of 搜索组中的用户...

这是我们AD的结构:

在此处输入图像描述

这是我的 saerch 组代码:

public string GetGroup(string groupname)
        {
            string path = "<OurDomain>";

            DirectoryEntry rootEntry = new DirectoryEntry(path);

            DirectorySearcher srch = new DirectorySearcher(rootEntry);
            srch.SearchScope = SearchScope.Subtree;

            srch.Filter = "(&(objectCategory=Group)(name=" + groupname + "))";

            SearchResult resFilter = srch.FindOne();

            string filterpath = resFilter.Path;

            return filterpath; 
        }

我查找用户的方法:

public bool IsUserInGroup(string username,string groupepath) 
        {
            string path = "<OurDomain>"; 

            DirectoryEntry rootEntry = new DirectoryEntry(path);

            DirectorySearcher srch = new DirectorySearcher(rootEntry);
            srch.SearchScope = SearchScope.Subtree;

            srch.Filter = "(&(objectClass=user)(sAMAccountName=*" + username + "*)(memberof=CN=GastzugangUser,OU=SubFolderB,OU=FolderB,DC=company,DC=com))";


            SearchResultCollection res = srch.FindAll();

            if (res == null || res.Count <= 0)
            {
                return false;
            }
            else
            {
                return true; 
            }
        }

如何在组的子组和动态中搜索用户?:(

4

2 回答 2

1

没有尝试过,但将其添加到过滤器有帮助吗? http://ldapwiki.willeke.com/wiki/1.2.840.113556.1.4.1941

例如

(&(objectClass=user)(sAMAccountName=*" + username + "*)(memberof:1.2.840.113556.1.4.1941:=CN=GastzugangUser,OU=SubFolderB,OU=FolderB,DC=company,DC=com))";
于 2013-01-09T12:12:59.697 回答
1

如果您使用的是 .NET 3.5 及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM) 命名空间。在这里阅读所有相关信息:

基本上,您可以定义域上下文并在 AD 中轻松找到用户和/或组:

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
  // find a user
  UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

  if(user != null)
  {
      // GetAuthorizationGroups returns a list of GroupPrincipals and work recursively
      var groupsForUser = user.GetAuthorizationGroups();

      // then check to see if that group you want it part of this list
  }
}

新的 S.DS.AM 使得在 AD 中与用户和组一起玩变得非常容易!

于 2013-01-09T12:18:45.720 回答