2011-11-04 50 views
0

我正在嘗試做幾件事情。首先該C#程序驗證對Active Directory用戶憑據使用:使用Active Directory時出現的超時問題

var ADentry = new DirectoryEntry("LDAP://domain", uname, pword); 

但很明顯,你需要用戶名和密碼來傳遞某種方式。有沒有辦法可以在用戶從Active Directory登錄到網絡時自動檢索,並在沒有用戶名和密碼中的用戶名類型的字段中使用。

如果沒有,我做了這個,所以用戶可以在控制檯中輸入他們的憑證。但如果它不起作用,它會永遠掛起來。說1分鐘後,我可以使用什麼類型的代碼來超時,如果這種情況持續下去,否則它會永久掛起?謝謝

+0

你已經發布了兩個問題 - 分成兩個會更好。你的第二個問題在這裏回答:http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline – ChrisWue

回答

0

我試圖做一個LDAP查詢,下面將爲你做。它的大部分是方法,但是你可能有興趣在這行代碼:PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ContextOptions.Negotiate);

完整的代碼是在這裏:

IsUserGroupMember("username", "group name the user is in"); 

public string sDomain = "your.domainName.com" 
public string sDefaultOU = OU=**,OU=**,DC=**,DC=**,DC=** 

     public void IsUserGroupMember(string sUserName, string sGroupName) 
     { 
      try 
      { 
       UserPrincipal oUserPrincipal = GetUser(sUserName); 
       GroupPrincipal oGroupPrincipal = GetGroup(sGroupName); 

       if (oUserPrincipal != null && oGroupPrincipal != null) 
       { 
        //do something 
       } 
       else 
       { 
        //nothing 
       } 
      } 
      catch (PrincipalServerDownException) 
      { 
       throw; 

      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 


public UserPrincipal GetUser(String sUserName) 
     { 
      PrincipalContext oPrincipalContext = GetPrincipalContext(); 

      UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, sUserName); 
      return oUserPrincipal; 


     } 

     public GroupPrincipal GetGroup(string sGroupName) 
     { 
      PrincipalContext oPrincipalContext = GetPrincipalContext(); 

      GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, sGroupName); 
      return oGroupPrincipal; 
     } 

     public PrincipalContext GetPrincipalContext() 
     { 
      PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ContextOptions.Negotiate); 
      return oPrincipalContext; 
     } 

我希望這個代碼將是對你有用。

相關問題