1

ADAM で作成したユーザーを使用して、ADAM に対してユーザーを認証しようとしています。ただし、使用されたパスワード (正しいか間違っているか) に関係なく、私の検索では有効な DirectoryEntry オブジェクトが返されます。パスワードが無効な場合、検索で null オブジェクトが返されると思います。私の仮定は間違っていますか、それとも以下のコードに欠陥がありますか?

DirectoryEntry de = new DirectoryEntry("LDAP://localhost:389/cn=Groups,cn=XXX,cn=YYY,dc=ZZZ");
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + userId + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count > 0)
{
    DirectoryEntry d = new DirectoryEntry(results[0].Path, userId, password);
        if (d != null)
        DoSomething();

}
4

1 に答える 1

0

DirectoryEntryのプロパティにアクセスして、それが有効かどうかを判断する必要があります。私は通常、GUIDがnullかどうかを確認します。

bool valid = false;
using (DirectoryEntry entry = new DirectoryEntry( results[0].Path, userId, password ))
{
     try
     {
         if (entry.Guid != null)
         {
            valid = true;
         }
     }
     catch (NullReferenceException) {}
}

注:検索ルートディレクトリのエントリとサーチャーをusingステートメントでラップするか、リソースを使用したままにしないように、完了したら明示的に破棄することもできます。

PS無効なディレクトリエントリのプロパティにアクセスしようとすると、どの例外がスローされるのか正確にはわかりません。ちょっとした実験は、おそらくどの例外をキャッチするかを理解するためです。認証の失敗とは異なる方法で処理したい他の問題(たとえば、ディレクトリサーバーが利用できない)があるため、すべての例外をキャッチする必要はありません。

于 2008-11-19T01:06:39.203 に答える