2012-02-02 2 views
3

System.DirectoryServices.Protocols의 LdapConnection을 사용하여 Active Directory를 쿼리 할 수 ​​있습니까?LdapConnection을 사용하여 AD를 열거 함

PrincipalContext를 인스턴스화하는 데 문제가 있습니다. 나는 동일한 값을 전달하고

 PrincipalContext context = new PrincipalContext(
      ContextType.Domain, 
      ldapServer, 
      null, 
      useSsl ? ContextOptions.SecureSocketLayer | ContextOptions.SimpleBind : ContextOptions.SimpleBind, 
      username, 
      password); 

을 사용하고있는 교장 컨텍스트를 인스턴스화하려고 할 때 완벽 이름을 위해,

private LdapConnection getLdapConnection(string username, string password, string ldapServer, bool secured) 
    { 
     int port = secured ? 636 : 389; 

     LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier(ldapServer, port, false, false)); 

     if (secured) 
     { 
      connection.SessionOptions.ProtocolVersion = 3; 
      connection.SessionOptions.SecureSocketLayer = true; 
     } 


     connection.Credential = new NetworkCredential(username, password); 
     connection.AuthType = AuthType.Basic; 
     connection.SessionOptions.VerifyServerCertificate += (conn, cert) => { return true; }; 
     connection.Bind(); 

     return connection; 
    } 

: 여기 내 코드는 누군가가 문제를 발견 할 경우,의 domain\user의 형식이고 ldapServer의 형식은 server.domain.com이고 ldapServer의 값은 다음과 같습니다. 주체 컨텍스트를 만들 때 636이 추가됩니다.

연결하려는 서버에 인증 문제가있어 LdapConnection이 확인을 위해 true를 반환하도록 설정되어 있기 때문에이를 방지 할 수 있습니다. 신뢰할 수있는 문제는 아닙니다. 나는 서버에 접근 할 수 없기 때문에 이것을 바꿀 수 없다.

+0

오류가 발생했습니다. –

+0

서버에 연결할 수 없습니다. – Sam

+0

당신의 LDAP 서버를'dc = MyDomain, dc = com'으로 시도하십시오. –

답변

2

도메인을 대상으로 지정할 때 컨테이너 매개 변수는 null이 될 수 없습니다. 다음이 하나

PrincipalContext domainContextMonou = new PrincipalContext(ContextType.Domain, 
                  "server.domain.com :389", 
                  "dc=domain,dc=com", 
                  username, 
                  password); 

: 그리고 당신은 그냥이 생성자를 시도 할 수 있습니다 당신이 AuthType.Basic을 사용하고 있는지

PrincipalContext domainContextMonou = new PrincipalContext(ContextType.Domain, 
                  "server.domain.com :636", 
                  "dc=domain,dc=com", 
                  useSsl ? ContextOptions.SecureSocketLayer | ContextOptions.SimpleBind : ContextOptions.SimpleBind, 
                  username, 
                  password); 
+0

의견에 감사드립니다. 서버에서 389 (보안되지 않은 LDAP)가 활성화되어 있지 않으므로 맨 위의 기능은 작동하지 않습니다. LDAPS가 필요합니다. 두 번째 시도는 server.domain.com과 ldaps : //server.domain.com입니다. 원격 LDAPS 서버의 URI는 원격. {domain} .net.au 형식입니다. 나는 dc = {domain}, dc = net, dc = au를 시도했다. 올바른 직류가 무엇인지 확인할 수 있습니까? 귀하의 의견에 감사드립니다. – Sam

+0

세 번째 매개 변수는 검색을 시작할 개체의 고유 이름입니다. 나는 DN의 iea가 LDP.EXE (연결, 바인드 및 트리보기)를 실행하려고 시도하지 않습니다. DNS 이름 domain.net.au에 대한 DN은 "dc = domain, dc = net, dc = au"여야합니다. – JPBlanc

0

나는 LDAP 코드와 문제의 일부를 의심이다. 대신 Negotiate을 시도하십시오.

+0

Brian에게 감사하지만이 문제가 해결되지 않았습니다. – Sam

관련 문제