asp.net 下利用DirectoryEntry验证用户及获取域控制器下的用户结构信息

来源:互联网 发布:面具淘宝 编辑:程序博客网 时间:2024/04/18 11:26

在企业的众多应用软件中,每个用户对每个软件都需要记住登录的帐号和密码。时间久了,会忘记或搞混。管理人员在用户管理时也需要挨个软件去维护。确实很麻烦。解决的方法是要有统一的用户管理,同一个帐号可以登录多个软件。创建域用户是很好的解决方法。

一、用户的域验证,用户登录软件时,系统先把帐号和密码发送到域服务器进行验证,通过后才能使用软件。

创建 DirectoryEntry对象, 参数:域名(domain) 形如 xxxxx.com,域用户(domainAndUsername)形如 xxxxx.com\user ,域密码(pwd),域用户(user)= 用户登录帐号

C#代码:

                               DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}",                                domain),                                 domainAndUsername,                                pwd);                string r = "ok";                try                 {                  DirectorySearcher search = new DirectorySearcher(entry); //创建DirectoryEntry对象的搜索对象                  search.Filter = "(SAMAccountName=" +user + ")";  //过滤条件为登录帐号=user                   SearchResult result = search.FindOne(); //查找第一个                   if (null == result)   //没找到                     {                      r = "cancel";                     }                 }                catch (Exception ex)                 {                 r = ex.Message;                 }                return r;                   

二、列举域控制器下的所有用户及组织

本例列举某公司下的组织及用户(组织结构:公司->部门->用户),运行软件的电脑须加入域才能读取域用户信息,如果是web,则发布的服务器也须加入域中。

               //domain 域名称 user 域上的用户, pwd 域上的用户密码,root 公司名称 ou=root 表示该公司下的组织及用户  StringBuilder sb = new StringBuilder();  try  {       DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}/OU={1},DC={2},DC={3}",                    domain, root,                    domain.Split('.')[0], domain.Split('.')[1]),                    domain + @"\" + user, pwd);                      DirectorySearcher mySearcher = new DirectorySearcher(entry);                     mySearcher.Filter = ("(objectClass=organizationalUnit)");  // 查找条件是entry 下的部门                      sb.Append("[{id:'0',pid:null,text:'" + root + "',expand:true}");                       int i = 1;                     foreach (SearchResult resEnt in mySearcher.FindAll()) //遍历所有部门                       {                             string _a = resEnt.GetDirectoryEntry().Name.Split('=')[1];                             if (_a != root)                            {                                     sb.Append(",{id:'" + i.ToString() + "',pid:'0',text:'" + _a + "'}");                                      DirectorySearcher m1 = new DirectorySearcher(resEnt.GetDirectoryEntry());  //查找用户对象                   m1.Filter = ("(objectClass=user)");  //查找条件是所有用户                                      foreach (SearchResult r1 in m1.FindAll())  //遍历该部门下的所有用户                                      {                                           sb.Append(",{                        id:'"                         + r1.GetDirectoryEntry().Properties["sAMAccountName"][0].ToString()                        + "',pid:'"                         + i.ToString()                         + "',text:'"                         + r1.GetDirectoryEntry().Properties["Name"][0].ToString()                         + "'}");              }            i++;                            }                  }                sb.Append("]");              

三、把返回的用户信息以树形方式显示在html 上

     <div id="user" class="gtreeselect"  data-options="{poupuWidth:240,leafNode:true,width:210,onChange:set}" ></div>              
         $(function () {         jgui.post("/Data/getaduser", { domain: "gxdonta.com",             user: "admin",             pwd: "123456",             root: encodeURIComponent("XXXXXX有限公司") },          function (text) {            jgui.get('user').setData(jgui.parseJSON(text));         });     });          
0 0
原创粉丝点击