C#ActiveDirectory LDAP组查询

基本上我要做的是,我有一个ASP.Net Web应用程序,它使用Forms Authentication和一些自定义代码将它链接到ActiveDirectory(非常类似于它的工作原理)。

但是,每当我查询用户组的域控制器时,它只返回它们明确在的组而不是子组(id est,用户所属的特定安全组,比如组A,即组成员我想要的组,比如组B,用户明确在组A中,但只是隐含在组B中,因为组A是组B的成员)。

我已经阅读了tokenGroups查询可以帮助我在这里,但目前我没有办法解析这些数据。

然而,最可取的是,如果我可以通过LDAP查询传递某些组,并且如果该用户位于该组内,则让Domain控制器只给我一个布尔值(true / false)。

有什么建议?

是的,“通常” user.Properties["memberOf"]仅返回直接成员资格。

但是,如果您使用的是.NET 3.5,则可以使用更现代的“基于主体”方法:

 using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) { using(Principal p = Principal.FindByIdentity(ctx, "yourUserName")) { var groups = p.GetGroups(); using (groups) { foreach (Principal group in groups) { Console.WriteLine(group.SamAccountName + "-" + group.DisplayName); } } } } 

此方法(将“System.DirectoryServices.AccountManagement”程序集的引用添加到项目中)应该可以工作并传递用户的主要组及其嵌套组成员身份。

如果您使用的是.NET 2.0 / 3.0并且无法向上移动,那么通过阅读“tokenGroups”属性来使用该方法是最好的方法 – 请参阅Ryan Dunn优秀博客文章中有关如何完成所有这些操作的详细信息, Enumerating .NET中的令牌组(tokenGroups) 。