2011-06-01 152 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; 
    }