2010-07-06 5 views
1

사용자가 회사 네트워크 사용자 이름과 암호를 입력해야하는 웹 사이트가 있습니다. 그런 다음 Active Directory에서 해당 계정을 찾고 해당 계정과 연결된 모든 전자 메일 주소의 목록을 가져옵니다.첫 번째 시도에서 Active Directory 계정 잠김

내가 가지고있는 문제는 잘못된 암호로 인해 계정이 잠겨 있다는 것입니다. 우리의 도메인 정책은 3 개의 잘못된 항목 후에 계정이 잠길 것이므로 내 코드에서 뭔가 잘못하고 있다고 가정합니다. 필자는 일반적으로 Active Directory 또는 .NET DirectoryServices에 대해 잘 알고 있지 않습니다. 이는 내 코드에서 분명히 드러납니다. 여기있다 :

public ArrayList AuthenticateActiveDirectory(string Domain, string UserName, string Password) 
{ 
    // An error occurs if the username/password combo does not exist. 
    // That is how we know it is not a valid entry. 
    try 
    { 
     DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain, UserName, Password); 
     object nativeObject = entry.NativeObject; 
     ArrayList emails = new ArrayList(); 
     DirectorySearcher ds = new DirectorySearcher(entry); 
     ds.Filter = "samaccountname=" + UserName; 
     ds.PropertiesToLoad.Add("mail"); 
     SearchResult sr = ds.FindOne(); 
     if (sr.Properties["mail"] != null) 
     { 
      for (int email = 0; email < sr.Properties["mail"].Count; email++) 
      { 
       emails.Add(sr.Properties["mail"][email]); 
      } 
     } 
     return emails; 
    } 
    catch (DirectoryServicesCOMException) { throw; } 
    catch (Exception) { throw; } 
} 
+0

'catch (Exception) {throw; }'? –

+0

Nothing :) 나는 거기에 추가 처리가 필요할 수도 있다고 생각하는 경우 가끔 있습니다. 디버깅 할 때도 사용하며, 여기에서 이러한 예외가 발생할 수 있다는 추가 알림으로 사용됩니다. – MJB

답변

0

좀 검색을했고, 단지 인증하고 이메일이나 다른 어떤 검색하지 않는 것을 사용하는 몇 가지 코드 (솔루션에 대한 Ayende Rahien 덕분에) 발견했다. 다른 함수보다 먼저이 함수를 사용하고 있으며 정상적으로 작동하는 것 같습니다. 내 다른 코드가 AD를 한 번 이상 (적어도 3 번) 치고 있다고 추측하고 있습니다. 이로 인해 잠금이 발생합니다. 다음은 인증을 위해 지금 사용하고있는 코드입니다.

private bool Authenticate(string domain, string user, string password) 
{ 
    try 
    { 
     using (DirectoryEntry de = new DirectoryEntry("LDAP://" + domain, 
               user, password)) 
     { 
      return de.NativeObject != null; 
     } 
    } 
    catch 
    { 
     return false; 
    } 
} 
+1

부수적으로 암호 재 시도를위한 일반적인 경험 법칙은 10 단계 정도로 범핑하는 것입니다. 이것은 여러 창 구성 요소가 "액세스 거부"메시지를 제공하기 전에 여러 번 자동으로 다시 시도하는 것으로 악명이 높기 때문입니다. 이것은 또한 보안이 심각하게 저하되는 것은 아닙니다. 3 번의 시도로 10 번 시도 할 때 암호를 추측 할 가능성이 거의 없기 때문입니다. 또한이 작은 제한은 침입자가 단순히 다른 사람이 기록하지 못하도록 막는 매우 성공적인 DOS 공격으로 이어질 수 있습니다 in. – NotMe

+0

고마워,하지만 내 전화가 아니야. 나는 우리의 네트워크 관리자가 그것에 동의 할 것이라고 생각하지 않습니다. DOS 공격과 관련하여 :이 사이트는 내부 용입니다. – MJB