2013-04-29 78 views
0

當我嘗試獲取用戶所屬的組時,出現「登錄失敗:未知用戶名或密碼錯誤」錯誤。用戶身份驗證正常工作,這是我無法理解的。我如何正確認證用戶對AD的身份,但無法獲得他的組名? 我得到用戶的ID和密碼。我有一個處理認證的類。LDAP獲取組名稱

 if ((true == adAuth.IsAuthenticated(sDomain, sID, sPassword))) 
     { 
      string sGroups = adAuth.GetGroups(); 

這是認證類:

public class LdapAuthentication 
{ 
    string _path; 
    string _filterAttribute; 

    public LdapAuthentication(string path) 
    { 
     _path = path; 
    } 

public bool IsAuthenticated(string domain, string username, string pwd) 
{ 
    string domainAndUsername = domain + "\\" + username; 
    DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd); 

    try { 
     //Bind to the native AdsObject to force authentication.   
     object obj = entry.NativeObject; 
     DirectorySearcher search = new DirectorySearcher(entry); 

     search.Filter = "(SAMAccountName=" + username + ")"; 
     search.PropertiesToLoad.Add("cn"); 
     SearchResult result = search.FindOne(); 

     if ((result == null)) { 
      return false; 
     } 

     //Update the new path to the user in the directory. 
     _path = result.Path; 
     _filterAttribute = Convert.ToString(result.Properties["cn"][0]); 

     } 
     catch (Exception ex) { 
     throw new Exception("Error authenticating user. " + ex.Message); 
      //return false; 
     } 

     return true; 
    } 

public string GetGroups() 
{ 
    //DirectorySearcher search = new DirectorySearcher(_path); 

     // Use following two lines instead of the above to handle cases of authenticatin against an LDAP server other than local AD domain 
     DirectoryEntry deSearchRoot = new DirectoryEntry(_path); 
     DirectorySearcher search = new DirectorySearcher(deSearchRoot); 

      search.Filter = "(cn=" + _filterAttribute + ")"; 
     search.PropertiesToLoad.Add("memberOf"); 
     StringBuilder groupNames = new StringBuilder(); 

     try { 
      SearchResult result = search.FindOne(); 
      int propertyCount = result.Properties["memberOf"].Count; 

      string dn = null; 
      int equalsIndex = 0; 
      int commaIndex = 0; 

      int propertyCounter = 0; 

      for (propertyCounter = 0; propertyCounter <= propertyCount - 1; propertyCounter++) { 
       dn = Convert.ToString(result.Properties["memberOf"][propertyCounter]); 

       equalsIndex = dn.IndexOf("=", 1); 
       commaIndex = dn.IndexOf(",", 1); 
       if ((equalsIndex == -1)) { 
        return null; 
       } 

       groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); 
       groupNames.Append("|"); 
      } 

     } catch (Exception ex) { 
      throw new Exception("Error obtaining group names. " + ex.Message); 
     } 

     return groupNames.ToString(); 
    } 

IsAuthnticated的推移和工作正常; GetGroups()返回「錯誤獲取組名稱」,然後返回「登錄失敗:未知用戶名或錯誤密碼」(即GetGroups()中的異常)。

它運行良好,當我從VS運行應用程序,但當我發佈它(在同一臺服務器上),它的行爲就像這樣。 任何想法非常感謝。

回答

0

沒關係;操作員錯誤。代碼工作正常。