基本上我要做的是,我有一个ASP.Net Web应用程序,它使用表单身份验证和一些自定义代码将其链接到ActiveDirectory(非常类似于this的工作方式)。
但是,每当我向域控制器查询用户组时,它只返回它们明确在的组而不是子组(id est,用户所属的特定安全组,比如组A,即我想要的组成员,比如B组,用户明确在组A中,但只是隐含在组B中,因为组A是组B的成员。
我读过tokenGroups查询可以帮助我,但目前我没有办法解析这些数据。
然而,最可取的是,如果我可以通过LDAP查询传递某些组,并且如果该用户位于该组内,则让Domain控制器只给我一个布尔值(true / false)。
有什么建议吗?
答案 0 :(得分:4)
是的,“通常”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 Token Groups (tokenGroups) in .NET。
马克