获取角色列表,使用Active Directory进行域操作

本文关键字:操作 Directory Active 角色 列表 使用 获取 | 更新日期: 2023-09-27 18:28:35

我试图在C#中列出Active Directory中的角色列表,但到目前为止,我找到的唯一答案是绑定到特定用户的角色的列表,而不是所有角色的域列表。

这是我在这里找到的片段

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
   // find a user
   UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
   if(user != null)
   {
       // get the authorization groups - those are the "roles" 
       var groups = user.GetAuthorizationGroups();
       foreach(Principal principal in groups)
       {
           // do something with the group (or role) in question
       }
   }
}

正如您所看到的,获取角色列表的唯一方法是使用绑定到用户的UserPrincipal对象。我想列出可以从特定域分配给用户的所有可能的角色。

顺便说一句,我不太了解Active Directory中的用户/组/角色层次结构,所以在思考该结构如何工作时,我可能会错,比如说,角色可能只是一种特殊的组。

获取角色列表,使用Active Directory进行域操作

您可以使用PrincipalSearcher和"query-by-example"主体进行搜索:

// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
   // define a "query-by-example" principal - here, we search for a GroupPrincipal 
   GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
   // create your principal searcher passing in the QBE principal    
   PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
   // find all matches
   foreach(var found in srch.FindAll())
   {
       // do whatever here - "found" is of type "Principal" - it could be user, group, computer....
   }
}

此搜索从当前连接的域的顶层开始,并枚举该域中的所有组。现在,这些可以是安全组,也可以是通讯组列表组-如果你想获得安全组(真正对应于"角色"),你可以这样调整你的搜索者:

 GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
 qbeGroup.IsSecurityGroup = true;

有关更多详细信息,请参阅System.DirectoryServices.AccountManagement命名空间上的MSDN文档。