Bagaimana cara mengatasi pengecualian nama pengguna atau kata sandi yang salah saat melakukan otentikasi AD di C#?

pemrograman


Saya mendapatkan pengecualian “Pengecualian nama pengguna atau kata sandi salah” saat melakukan Otentikasi AD di c#. Saya menggunakan asp.net dengan c# dan kerangka kerja 4.6.1. Saya telah mengatur mode otentikasi Windows Diaktifkan dan Anonim Dinonaktifkan. Saya mendapat pengecualian saat mencapai kode

SearchResult sr = ds.FindOne();

.Sampai tidak ada pengecualian di sana. Saya mendapatkan domain, pengguna domain semuanya dengan benar.

Apa yang saya coba:

Kode saya seperti di bawah ini:

Common.WriteDDSLog("ValidateWindowsUser()-Process Started for LoginId:" + txtLoginID.Text);
           //Added by Varun T V
           //Checks the user is active or not before sending credentials to Active Directory
           //Will send request to AD only when user is active
           BLL_Users objUser = new BLL_Users();
           string errorCode = "", errorMsg = "";
           DataSet dsUserExists = new DataSet();
           dsUserExists = objUser.CheckUserActiveOrExists(txtLoginID.Text.Trim(), ref errorCode, ref errorMsg);
           if (dsUserExists.Tables[0].Rows.Count > 0)
           {

               // Directory path
               string path = "LDAP://" + Domain;
               DirectoryEntry de = new DirectoryEntry(path);

               // Provide credentials to get to domain
               de.Username = Domain + "\\" + sUser;
               de.Password = sPassword;
               de.AuthenticationType = AuthenticationTypes.Secure;

               // Search result
               DirectorySearcher ds = new DirectorySearcher(de, null, new string[] { "distinguishedName" });
               SearchResult sr = ds.FindOne();

               if (sr != null)
               {
                   bSearchResult = true;

               }
           }

Solusi 1

Tidak ada pesan kesalahan apa pun yang disebutkan dalam pertanyaan. Catatan, jika kredensial salah, metode ds.FindOne() akan memunculkan pengecualian, karena bergantung pada kredensial pengguna untuk menyambung ke AD. Metode ini mungkin bukan cara yang paling efisien untuk memvalidasi kredensial. Untuk meningkatkan kinerja. Jika Anda bekerja pada .NET 3.5 atau lebih baru (ya, Anda menggunakan 4.6.1), Anda dapat menggunakan System.DirectoryServices.AccountManagement namespace dan verifikasi kredensial Anda dengan mudah:

C#
// create a "principal context" - e.g. your domain (could be machine, too)
using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"))
{
    // validate the credentials
    bool isValid = pc.ValidateCredentials("myuser", "mypassword");
}

Referensi: Baca selengkapnya di sini:

[^]

コメント

タイトルとURLをコピーしました