Code Bye

关于LDAP 登陆,和获取用户组集合的一些问题.


这是我做的登陆,在object obj = entry.NativeObject;这一步的时候显示服务器无法操作,在正式服务器上面是可以正常登陆的,但是在本地和测试服务器上面就显示服务器无法操作了,我想请问一下是什么问题.   

还有我这边大概需要做一个获取域内所有用户的集合,我想请教一下怎么写代码,求各位路过的高手帮忙解答,谢谢各位了

20分

#1

LDAP登陆没用过,我也不敢妄言。查找AD中的用户信息我给你一个我的代码供参考~
  DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain.GetCurrentDomain());
                    DirectorySearcher mySearcher = new DirectorySearcher(entry);
                    mySearcher.Filter = "(&(objectClass=user)(displayname=" + user.Name + "))";  //user表示用户,group表示组
                    mySearcher.PropertiesToLoad.Add("userPrincipalName");
                    mySearcher.PropertiesToLoad.Add("department");
                    mySearcher.PropertiesToLoad.Add("mail");
                    mySearcher.PropertiesToLoad.Add("title");
                    try
                    {
                        var result = mySearcher.FindOne();
                        if (result != null)
                        {
                            if (result.Properties.Contains("mail"))
                            {
                                user.Email = result.Properties["mail"][0].ToString();
                            }
                            else
                            {
                                user.Email = "null@null.com";
                            }
                            if (result.Properties.Contains("department"))
                            {
                                Department = result.Properties["department"][0].ToString().ToLower();
                            }
                            if (result.Properties.Contains("title"))
                            {
                                title = result.Properties["title"][0].ToString().ToLower();
                            }
                        }
                    }
                    catch(Exception e)
                    {
                        user.Email = "fail ad search";                        
                        throw;
                    }
                });

我因为个人的需求,在生成DirectoryEntry时不需要提供账号密码,但是跨域查询据我经验来看提供异域的AD用户的账号密码是解决问题的捷径。
Searcher.filter指定的就是在域里搜索的条件。此时因为未设置pagesize,最多只可得到1000条数据,随意设置pagesize后可获取更多数据。个人亲测,设置pagesize=1000,取得6000+条数据。只是我用了这么点而已。
PropertiesToLoad.add添加的是从ad中获取的属性,如果不指定,默认取得adpath属性和一个什么属性(忘记了)。

20分

#2

mysearcher.findone()根据filter条件获取一条记录,
findall()获取很多条记录。此时应注意上限

#3

回复1楼:

我想请问一下那个path,也就是你上面代码上的”LDAP://” + Domain.GetCurrentDomain(),需要用到哪些参数?怎么配.

#4

回复2楼:

我顺便问一下,是不是不同公司的searcher.Filter = “(objectClass=account)”;  objectClass的值都不一样,有人用account表示用户,有人用Users表示,searcher.PropertiesToLoad.Add(“cn”);还有这个,cn是不是表示的获取User的哪一个属性?如果我不知道数据库是什么样的我有什么方法可以查询到么?

#5

回复1楼:

我顺便问一下,是不是不同公司的searcher.Filter = “(objectClass=account)”;  objectClass的值都不一样,有人用account表示用户,有人用Users表示,searcher.PropertiesToLoad.Add(“cn”);还有这个,cn是不是表示的获取User的哪一个属性?如果我不知道数据库是什么样的我有什么方法可以查询到么?

#6

 

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于LDAP 登陆,和获取用户组集合的一些问题.