[ad_1]
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:
// 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:
[ad_2]
コメント