2012-02-02 7 views
3

System.DirectoryServices.ProtocolsのLdapConnectionを使用してActive Directoryに問い合わせることはできますか?LdapConnectionを使用してADを列挙する

PrincipalContextのインスタンス化に問題があります。

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; 
    } 

私は

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

を使用しています主なコンテキストをインスタンス化しようとすると、私は完全ユーザ名のために、同じ値を渡しています:ここに私のコードは、誰もが問題を見つけることができた場合に、ですdomain\userの形式であり、ldapServerはserver.domain.comの形式であり、ldapServerは、プリンシパルコンテキストを作成するときに追加されます。

私が接続しようとしているサーバーには、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); 

そして、この1:あなたはちょうどこのコンストラクタ試すことができます私はLDAPコードを使用して、問題の一部を疑う

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が必要です。 もう1つは、server.domain.comとldaps://server.domain.comの両方で試したものです。リモートLDAPSサーバーのURIは、リモート。{domain} .net.auの形式です。私はdc = {domain}、dc = net、dc = auを試しました。あなたは正しいDCが何であるべきかを確認できますか?ご意見をいただきありがとうございます。 – Sam

+0

3番目のパラメータは、検索を開始するオブジェクトの識別名です。私はあなたのDNのieaだけLDP.EXE(接続、バインド、およびビューツリー)を起動しようとしています。私のためにDNS名domain.net.auのDNは "dc = domain、dc = net、dc = au"でなければなりません – JPBlanc

0

をおAuthType.Basicを使用していることです。代わりにNegotiateを試してください。

+0

ブライアンに感謝しますが、これで私の問題は解決しませんでした。 – Sam

関連する問題