2011-06-01 113 views
0

C#应用程序是否可以找到windows domain上的所有用户,以使应用程序在domain之外运行,并且不在同一个网络上可能在http之上?活动目录

回答

0

您需要应用程序的某些组件才能在可询问Active Directory的“区域”中运行。

这可能是一个作为WCF Web服务公开的小型服务器端组件,您可以通过HTTP从任何位置查询您需要的内容(默认情况下不安全)。

0

这取决于域的安全设置。当然,不是直接通过http绑定域的域控制器。假设他们没有阻塞防火墙上的端口,可以使用常规的LDAP连接或依赖.NET中的Active Directory类。很有可能您必须使用安全连接,并且它将位于非标准端口上。您需要提供连接的域凭据才能连接。因为您不在域中,所以您可能还必须指定绑定到的域控制器 - 请参阅System.DirectoryServices.AccountManagement中的PrincipalContext,特别是constructor,它允许您提供凭证和控制器名称/端口。

0

公共数据表getActiveDirectoryUsers() {

  DataTable dt = new DataTable(); 
      dt.Columns.Add(new DataColumn("Name")); 
      dt.Columns.Add(new DataColumn("POCode")); 
      dt.Columns.Add(new DataColumn("Active")); 
      DataRow dtrow; 

      DirectoryEntry myLdapConnection = createDirectoryEntry(); 
      List<Users> listAlluers = new List<Users>(); 

      DirectorySearcher search = new DirectorySearcher(myLdapConnection); 
      SearchResult result; 
      SearchResultCollection resultCol = search.FindAll(); 

      //search.PropertiesToLoad.Add("cn");//user name 
      //search.PropertiesToLoad.Add("title"); //design 


      if (resultCol != null) 
      { 
       for (int counter = 0; counter < resultCol.Count; counter++) 
       { 
        string UserNameEmailString = string.Empty; 
        result = resultCol[counter]; 
        if (result.Properties.Contains("cn") && result.Properties.Contains("title")) 
        { 
         dtrow = dt.NewRow(); 
         dtrow[0] = (String)result.Properties["cn"][0]; 
         dtrow[1] = (String)result.Properties[BusinessLayer.UserConfig.UniqueField][0]; 
         dtrow[2] = (String)result.Properties["useraccountcontrol"][0]; 
         dt.Rows.Add(dtrow); 
        } 
       } 
      } 

     return dt; 
    } 
    static DirectoryEntry createDirectoryEntry() 
    { 

     String Path = "LDAP://your.server.Ip"; 
     DirectoryEntry ldapConnection = new DirectoryEntry(Path, "username", "password"); 

     return ldapConnection; 
    }