Active Directory - 获取本地组的父(全局)组

时间:2013-12-03 16:06:39

标签: c# asp.net-mvc-4 active-directory

我正在使用Active Directory验证MVC4应用程序。用户被分配到特定于此应用程序的本地安全组(Local_Group_APP_myApp_Admin)。

我使用的是自定义AuthorizeAttribute。我的操作方法之上的属性是:

[AuthorizeAD(Groups = "Local_Group_APP_myApp_Admin")]

在自定义AuthorizeAttribute类中,我有:

foreach (var group in groups)
    if (userPrincipal.IsMemberOf(context, IdentityType.Name, group))
        return true;
}

这将检查用户是否是Local_Group_APP_myApp_Admin的成员,这是假的(我不知道为什么)。如果我获得Local_Group_APP_myApp_Admin的PARENT(全局)组,我认为IsMemberOf(global_group)将返回true。

如何获取本地组的父组?

2 个答案:

答案 0 :(得分:0)

虽然您尚未指定userPrincipal的设置位置,但如果用户实际上是该组的成员,则问题似乎IsMemberOf仅返回true。如果您需要递归检查组成员身份,则需要执行以下操作:

using (PrincipalSearchResult<Principal> securityGroups = user.GetAuthorizationGroups())
{
    return securityGroups.Any(g => groups.Contains(g.Name));
}

GetAuthorizationGroups返回用户具有会员资格的所有安全组。

答案 1 :(得分:0)

您可以使用以下C#/ LDAP查询查询LDAP以从子组获取所有父组,您可以在此answer中查看代码的完整上下文,您需要获得正确的LDAP路径

DirectorySearcher searcher = new DirectorySearcher(entry, "(&(objectcategory=group)(cn=Local_Group_APP_myApp_Admin))", new string[] { "memberof" });
SearchResult result = searcher.FindOne();