1

私は c# と LDAP にまったく慣れていません。このプロジェクトを行っているので、より実践的なアプローチでそれらについて学ぶことができます。

私が作成しようとしているのは、ユーザーが LDAP を使用して Active Directory から入力した後にユーザー名とパスワードを認証するログイン クリック イベントを持つログイン フォームです。

この主題をよりよく理解できるように、Managing Directory Security Principals in the .NET Framework 3.5を読んだことがあります。また、検証自体を扱う同様のトピックもここで確認しました ( c# - Validate a username and password against Active Directory? ) およびこれはユーザー名を認証します ( LDAP を介した Active Directory に対する c# )

最初にリンクされたトピックから、次のコードがユーザー名とパスワードを認証するトリックを実行する必要があることを学びました。

  using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.string.com/OU=Users, Dc=example, Dc= string, DC=com"))
        {
            bool isValid = pc.ValidateCredentials(User, Password);
        }

したがって、これをクリックイベントに組み込むための私のアプローチは次のとおりです。

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.string.com/OU=Users, Dc=example, Dc= string, DC=com"))

            bool isValid = pc.ValidateCredentials(User, Password);

             if(isValid)
             {
                 Main m = new Main();
                 this.Close();
                 m.Show();
             }
             else
             {
                 MessageBox.Show("Invalid Username and/or Password","Error!");
                 textBox1.Clear();
                 textBox2.Clear();
                 textBox1.Focus();

             }

埋め込みステートメントのブールエラーが発生しています。ユーザー名のみを認証するこのコードを使用するという 2 番目の投稿から読んだ別のアプローチを試しました。

         PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.com/OU=Computers,OU=Users,dc=example,dc=com");

        UserPrincipal user = UserPrincipal.FindByIdentity(pc, "username");


        bool userExists = (user != null);

しかし、 UserPrincipal.FindByPasswordが存在しないため、この方法を使用してパスワードを認証できないことがわかりました。

私もこの方法で試しましたが、もう一度.Passwordが存在しません:

 PrincipalContext pc = new PrincipalContext(ContextType.Domain,"LDAP://....");

        UserPrincipal qbeUser = new UserPrincipal(pc);
        qbeUser.EmployeeId = User;

        //.Password does not exist
        UserPrincipal qbePassword = new UserPrincipal(pc);
        qbePassword.Password = Password;

        // create your principal searcher passing in the QBE principal    
        PrincipalSearcher srchUser = new PrincipalSearcher(qbeUser);
         PrincipalSearcher srchPass = new PrincipalSearcher(qbePassword);
        // try to find that user and password
        UserPrincipal founduser = srchUser.FindOne() as UserPrincipal;
        UserPrincipal foundpass = srchPass.FindOne() as UserPrincipal;

        if (founduser != null)
        {
            if (foundpass != null)
            {
                Main m = new Main();
                this.Close();
                m.Show();
            }
            else
            {
                MessageBox.Show("Password Not Valid.");
                textBox2.Clear();
                textBox2.Focus();
            }
        }

        else
        {
            MessageBox.Show("Username Not Valid.");
            textBox1.Clear();
            textBox1.Focus();
        }

誰かがこれに正しくアプローチする方法を教えてください。

前もって感謝します。

4

1 に答える 1