web-dev-qa-db-ja.com

LDAPサーバーが利用できません

私はこれがまったくの初心者です

PrincipalContextを使用してLDAPサーバーに接続しようとしています。私はこのサイトのすべての解決策を試しましたが、役に立ちませんでした。

私が試したこと:

PrincipalContext insPrincipalContext = 
   new PrincipalContext(ContextType.Domain);

PrincipalContext insPrincipalContext = 
   new PrincipalContext(ContextType.Domain, "ldap://localhost:389/dc=maxcrc,dc=com");

PrincipalContext insPrincipalContext = 
   new PrincipalContext(ContextType.Domain, "maxcrc.com");

すべて同じ結果になります:

LDAPサーバーは使用できません

ContextType.Machineのみが基本的に機能します。

LDAPサーバーが正しくセットアップされているかどうか不明:

  • ホスト:localhost
  • ポート:389
  • ベースDN:dc = maxcrc、dc = com
  • URL:ldap:// localhost:389/dc = maxcrc、dc = com

Softerra LDAP Browserを使用したテスト

最初から最後までのチュートリアルは大歓迎です...

10
Anarchy101

私は同じ問題に直面しており、解決策を見つけました。

次のコードを使用して簡単に接続できます:

 ADUser_Id = "domainName\\username"; //make sure user name has domain name.
 Password = "xxxx";
var context = new PrincipalContext(ContextType.Domain,"server_address", ADUser_Id,Password);
/* server_address = "192.168.15.36"; //don't include ldap in url */
7
Ravi Anand

同様の問題がありました。オブジェクトの初期化でユーザー名とパスワードを渡す必要があることがわかりました。以下のようなステートメントを使用してみてください:

PrincipalContext insPrincipalContext = 
new PrincipalContext(ContextType.Domain, 
"ldap://localhost:389/dc=maxcrc,dc=com",
userName,
password);

また、ユーザー名にドメインが含まれていることを確認してください。

例えば、

userName = "mydomainname" + "\\" + "john_jacobs"
3

PrincipalContextには、次のコンストラクタオーバーロードを使用します。

public PrincipalContext(
    ContextType contextType,
    string name,
    string container
)

そして、サーバー名をLDAP文字列から分離します。

PrincipalContext insPrincipalContext = 
   new PrincipalContext(ContextType.Domain, "localhost:389", "dc=maxcrc,dc=com");

https://msdn.Microsoft.com/en-us/library/bb348316%28v=vs.110%29.aspx

1
Owen Pauling

そのエラーは、明示的に指定せずに「匿名」として接続しようとしたことが原因である可能性があります。デフォルトでは、すべての接続が交渉可能です。したがって、そのようなことを試す場合は、次のことを試すことができます。

LdapDirectoryIdentifier ldap = new LdapDirectoryIdentifier("My Hostname or IP Address",10389); //10389 might be your non default port
LdapConnection connection = new LdapConnection(ldap);
connection.AuthType = AuthType.Anonymous;
0
objecto

私の環境では、ドメインコントローラーのホスト名だけでプリンシパルコンテキストを作成し、ユーザーの資格情報を個別に検証する必要がありました。

string domainControllerName = "PDC";
string domainName = "MyDomain"; // leave out the .Local, this is just to use as the prefix for the username if the user left it off or didn't use the principal address notation
string username = "TestUser";
string password = "password";

using (var ldap = new PrincipalContext(ContextType.Domain, domainControllerName))
{
    var usernameToValidate = username;
    if (!usernameToValidate.Any(c => c == '@' || c == '\\'))
            usernameToValidate = $"{domainName}\\{username}";

    if (!ldap.ValidateCredentials(username, context.Password, ContextOptions.SimpleBind))
        throw new UnauthorizedException();
}

この例では、ユーザー名のこれら3つのバリエーションすべてを検証できます。

0
Chris Schaller

代わりにローカルマシンのアドレスを試すことをお勧めします。

ldap://127.0.0.1:389/dc=maxcrc,dc=com

それがうまくいかない場合は、Wiresharkを起動し、Softerra経由で接続しようとしているときにポート389でトラフィックをキャプチャします。

私がLDAPと.Net DirectoryServicesを操作しているとき、そのエラーは通常、パスの構文または命名規則が正しくないか、有効なディレクトリエンドポイントを指していないことを意味します。

0
X3074861X