LDAP在.NET中查找Active Directory用户的组

时间:2015-11-30 15:01:16

标签: c# .net ldap

我正在尝试使用LDAP验证用户并返回用户所属的所有组:

我能够验证但无法获得所有组。

以下代码在本地计算机上运行,​​但在服务器上部署时返回错误。

public bool Authenticate1(string userName, string password, ref List<string> List)
        {
            const int ERROR_LOGIN_FAILURE = -2147023570;
            DirectoryEntry root = new DirectoryEntry("LDAP://rootDSE", userName, password, AuthenticationTypes.Secure);
            using (root)
            {
                try
                {
                        Object temp = root.NativeObject;
                        string defaultNamingContext = "";
                        defaultNamingContext = root.Properties["defaultNamingContext"].Value.ToString();
                        DirectoryEntry default1 = new DirectoryEntry("LDAP://" + defaultNamingContext, userName, password, AuthenticationTypes.Secure);
                        DirectorySearcher dSearch = new DirectorySearcher(default1.Path);
                        dSearch.Filter = "(SAMAccountName=" + userName + ")";
                        dynamic a = dSearch.FindOne();
                        **DirectoryEntry obUser = new DirectoryEntry(a.Path);**
                        object obGroups = obUser.Invoke("Groups");
                        foreach (object ob in (IEnumerable)obGroups)
                        {
                            // Create object for each group.
                            DirectoryEntry obGpEntry = new DirectoryEntry(ob);
                            dynamic vGroup = obGpEntry.Name;
                            vGroup = vGroup.Substring(vGroup.IndexOf("=") + 1, vGroup.Length - vGroup.IndexOf("=") - 1);
                            List.Add(vGroup);
                        }
                    return true;
                }
                catch (System.Runtime.InteropServices.COMException ex)
                {
                    List.Add(ex.Message);
                    List.Add(ex.ToString());
                    if (ex.ErrorCode != ERROR_LOGIN_FAILURE)
                    {
                        throw;
                    }
                    return false;
                }
            }
        }

此代码跟随行抛出错误

DirectoryEntry obUser = new DirectoryEntry(a.Path);

未将对象引用设置为对象的实例。 在服务器池上运行ApplicationPoolIdentity。根据公司政策,它应该在此之下运行。

不确定我在服务器上缺少什么?

干杯 哈利!

1 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5及更高版本,则应查看$sql = "INSERT INTO student(Student,School,PR) VALUES ('$_POST[name]','$_POST[school]','$_POST[pr]')"; mysqli_query($sql,$MySQLiconn); (S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

System.DirectoryServices.AccountManagement

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!