5

次のようなコードを使用して、LDAP ディレクトリへの安全な接続をセットアップします。

using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(ConfigReader.ADServer, 636)))
{
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
    con.Credential = new NetworkCredential(UserDN, UserPwd);
    con.AuthType = AuthType.Basic;
    con.Bind();
}

テスト中に、次の予想される動作に気付きました。

  • 有効な UserDN と有効な UserPwd により、Bind() が成功する
  • 有効な UserPwd を持つ無効な UserDN により、Bind() エラーが発生します (指定された資格情報が無効です)。
  • 無効な (空白ではない) UserPwd を持つ無効な UserDN により、Bind() エラーが発生します (指定された資格情報が無効です)。

残念ながら、次の予期しない動作も確認されました。

  • UserDN が有効で UserPwd が空白の場合、Bind() は成功します。
  • UserDN が無効で UserPwd が空白の場合、Bind() が成功する

空白のパスワードで LDAP 接続が成功する理由を教えてください。
ありがとう、

4

1 に答える 1

6

接続はバインドされているように見えますが、実際のリクエストが送信されるまで認証されません。

接続をバインドした後にリクエストを送信するには、次のことを検討してください...

 using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(ConfigReader.ADServer, 636)))
{
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
    con.Credential = new NetworkCredential(UserDN, UserPwd);
    con.AuthType = AuthType.Basic;
    con.Bind();
    **con.SendRequest(new SearchRequest(targetLocation, "(objectClass=*)", System.DirectoryServices.Protocols.SearchScope.Subtree, null));**
}
于 2013-08-28T18:30:14.430 に答える