2009-05-14 6 views
1

ADAM 인스턴스를 설정하고 일부 테스트 사용자를 추가했습니다. C#에서 Windows 계정을 사용하여 ADAM에 바인딩 할 수 있지만 ADAM 사용자 중 하나를 사용하여 바인딩 할 수는 없습니다. (성공적으로 ldp에서 adam 사용자를 바인딩 할 수 있음) & msDS-UserAccountDisabled 속성을 false로 설정하여 사용자가 활성화되었는지 확인했습니다.C#에서 ADAM에 대한 ADAM 사용자 인증 - 바인딩 할 수 없습니다.

오류 : 내 창문은 내가 성공적으로 &은 ADAM 사용자의 속성을 다시 가져올 검색 할 수 있습니다 계정과 내가 결합하지만 난 시도하고 ADAM 사용자 계정으로 바인딩 할 때 나는 여전히 그들을 인증하기 위해 고군분투 할 때 나는 오류를 얻을 시스템 .Runtime.InteropServices.COMException (0x8007052E) : 로그온 실패 : 알 수없는 사용자 이름 또는 암호가 잘못되었습니다. System.DirectoryServices.DirectoryEntry.Bind (부울 throwIfFail)

에 여기에 내가 사용하고있는 코드입니다 : 사전에 어떤 도움

string userName = txtUserName.Text; 
string password = txtPassword.Text; 
string ADConnectionString = "LDAP://localhost:389/CN=sandbox,DC=ITOrg"; 
DirectoryEntry entry = new DirectoryEntry(ADConnectionString); 

entry.Username = "myComputer\\Administrator"; 
entry.Password = "myPassword"; 
try 
{ 
DirectorySearcher searcher = new DirectorySearcher(entry); 
searcher.Filter = "(&(objectClass=user)(CN=" + userName + "))"; 
SearchResultCollection result = searcher.FindAll(); 
if (result.Count > 0) 
{ 
    //bind with simple bind 
    using (DirectoryEntry de = new DirectoryEntry(result[0].Path, userName, password,AuthenticationTypes.None)) 
    { 
     if (de.Guid != null) // this is the line where it dies 
     { 
       Label1.Text = "Successfully authenticated"; 
       Label2.Text = result[0].Properties["displayName"][0].ToString(); 
       Label3.Text = result[0].Properties["telephoneNumber"][0].ToString(); 
      } else 
      { 
      Lable1.Text = "Unable to Authenticate"; 
      } 
    } 
} 
else 
{ 
    Lable1.Text = "UserName :" + userName + " not found"; 
} 
} catch(Exception ex) 
{ 
    Label1.Text = "Error searching: " + ex.ToString(); 
} 

덕분에 많은 감사!

답변

6

아마도 사용자 이름 형식 문제 일 수 있습니다. SDS에서 ADAM 사용자를 인증 할 때는 LDAP 단순 바인딩을 사용하고 ADAM에서 지원하는 이름 형식을 사용해야합니다. ADAM은 기술적으로 Digest auth도 사용할 수 있지만 SDS (SDS.Protocols 만)에서는 사용할 수 없으므로 코드 접근에는 적용되지 않습니다.

사용자가 AuthenticationTypes.None을 설정 했으므로 파트가 ok가되어 단순 바인딩을 사용하고 있습니다. 잘못된 부분은 사용자 이름 형식입니다.

ADAM은 사용자의 전체 DN, displayName (설정되고 고유 한 경우) 및/또는 userPrincipalName (설정되고 고유 한 경우)을 "바인드 가능"사용자 이름으로 허용하므로 사용자의 전체 DN으로 시작하고 공장. 그렇다면 다른 사용자 이름 값도 시도 할 수 있습니다. ADAM에 displayName 또는 userPrincipalName에 대해 원하는 것을 넣을 수 있습니다. 유효성 검사가 없습니다. 값이 고유한지 확인하십시오.

ADAM에 대해 몇 가지 유형의 바인딩 인증을 수행하려는 경우 .NET 3.5의 PrincipalContext의 ValidateCredentials 메서드를 사용하면 성능 및 확장 성이 향상됩니다.

이런 종류의 자료는 항상 포럼에서 문서화되어 있으며 포럼에서에 항상 논의되고 있으며 내 사이트이기 때문에 훨씬 자주 자주 방문합니다. :) 친구가이 게시물에 나를 털어 놓지 않으면 나는 그것을 결코 보지 못했을 것이다.

+0

Welcome to Stackoverflow, Joe! 모든 ADAM 및 Active Directory 조사자는 귀하가 여기에서 자신의 질문에 계속 주목하고 있다는 것을 기꺼이 알게 될 것입니다! ;-) –

+0

나는 같은 문제가있다. 사용자의 특성에서 UPN을 제거하면 인증이 항상 실패합니다. 어쨌든 UPN없이 인증 할 수 있습니까? –