我有一种方法来检索用户所属的AD组列表。这是代码:
public static List<GroupPrincipal> GetGroups(string userName)
{
List<GroupPrincipal> result = new List<GroupPrincipal>();
// establish domain context
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
UserPrincipal user = null;
// find your user
user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if (user != null)
{
PrincipalSearchResult<Principal> groups = user.GetGroups();
// iterate over all groups
foreach (Principal p in groups)
{
// make sure to add only group principals
if (p is GroupPrincipal)
{
result.Add((GroupPrincipal)p);
}
}
}
return result;
}
在IE和Chrome中,这可以正常工作,但在Firefox中,它总是在user = UserPrincipal.FindByIdentity(yourDomain, userName);
上给我DirectoryServicesCOMException我甚至不知道是什么样的异常。有人可以解释我的错误是什么以及如何解决它?非常感谢你!
答案 0 :(得分:3)
将通话更改为:
using (HostingEnvironment.Impersonate()){
user = UserPrincipal.FindByIdentity(yourDomain, userName);
}
您需要确保您的应用程序池具有AD权限。这将使用托管环境的凭据(Web应用程序池标识)而不是用户的凭据执行基础AD调用,用户可能无权查询AD服务器。