27

DirectorySearcherを使用してLDAPサーバーのユーザーエントリを検索しています。

DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://myserver/OU=People,O=mycompany";
de.AuthenticationType = AuthenticationTypes.None;

DirectorySearcher deSearch = new DirectorySearcher();

deSearch.SearchRoot = de;
deSearch.Filter = "(uid=" + model.UserName + ")";

SearchResult result = deSearch.FindOne();

結果変数で意図した出力を取得できます。
ただし、ディレクトリエントリにパスワードを入力して同じユーザーを認証しようとすると、常に次のエラーが発生します。

"ユーザー名またはパスワードが正しくありません。"

DirectoryEntry entry = new DirectoryEntry("LDAP://myserver/OU=People,O=mycompany", username, password);
DirectorySearcher search = new DirectorySearcher(
    entry,
    "(uid=" + username + ")",
    new string[] { "uid" }
);

search.SearchScope = System.DirectoryServices.SearchScope.Subtree;
SearchResult found = search.FindOne();   ->>>>>this is where I get wrong credential error.

ユーザー名とパスワードは、認証したいユーザーのものです。

誰かが私がここで間違っていることやこれをデバッグする方法を教えてもらえますか?

4

2 に答える 2

49

このユーザー名、この行内のパスワード:

DirectoryEntry("LDAP://myserver/OU=People,O=mycompany", username, password);

ディレクトリ ルックアップの権限を持つアカウント用である必要があります。これは、サービス アカウントまたはテスト目的である可能性があり、自分で試してみてください。これは、認証しようとしている人のユーザー/パスであってはなりません。

認証する場合は、PrincipalContext を使用して次の手順を使用できます。

using(var context = new PrincipalContext(ContextType.Domain, "mydomain", "mydomain\serviceAcct", "serviceAcctPass")) {
 //Username and password for authentication.
 return context.ValidateCredentials(username, password); 
}

"serviceAcct" = ディレクトリ ルックアップのアクセス許可を持つドメイン ユーザー内のアカウント。"serviceAcctPass" = そのサービス アカウントのパスワード。私が言ったように、テストのために、独自のユーザー/パス コンテキストで試すことができます。

また、提供されたユーザー名が「ドメイン\ユーザー名」または「ユーザー名@ドメイン」のいずれかの形式であることを確認してください。

于 2012-07-19T13:27:49.920 に答える