Firefox中的UserPrincipal.FindByIdentity错误

时间:2013-10-01 20:46:46

标签: c# asp.net-mvc-4 authentication principalcontext

我有一种方法来检索用户所属的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我甚至不知道是什么样的异常。有人可以解释我的错误是什么以及如何解决它?非常感谢你!

1 个答案:

答案 0 :(得分:3)

将通话更改为:

using (HostingEnvironment.Impersonate()){
    user = UserPrincipal.FindByIdentity(yourDomain, userName); 
}

您需要确保您的应用程序池具有AD权限。这将使用托管环境的凭据(Web应用程序池标识)而不是用户的凭据执行基础AD调用,用户可能无权查询AD服务器。