我正在使用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。
如何获取本地组的父组?
答案 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();