1

我有一种方法可以检索用户所属的 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 中,它总是给我 DirectoryServicesCOMExceptionuser = UserPrincipal.FindByIdentity(yourDomain, userName);我什至不知道那是什么类型的异常。有人可以解释一下错误是什么以及如何解决吗?非常感谢!

4

1 回答 1

3

将调用更改为如下所示:

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

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

于 2013-10-01T21:12:47.527 回答