كيفية حل استثناء اسم المستخدم أو كلمة المرور غير الصحيح أثناء إجراء مصادقة AD في C#؟


أحصل على استثناء “استثناء اسم المستخدم أو كلمة المرور غير صحيح” أثناء إجراء مصادقة AD في c#. أنا أستخدم asp.net مع c# وإطار العمل هو 4.6.1. لقد قمت بضبط وضع مصادقة Windows على تمكين وتعطيل مجهول. أحصل على استثناء عند الوصول إلى الرمز

SearchResult sr = ds.FindOne();

.وحتى ذلك لا يوجد استثناء هناك. أحصل على المجال، مستخدم المجال بشكل صحيح.

ما حاولت:

الكود الخاص بي هو كما يلي:

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;

               }
           }

الحل 1

لا توجد أي رسالة خطأ مذكورة في السؤال. لاحظ، إذا كانت بيانات الاعتماد غير صحيحة، فستطرح طريقة ds.FindOne() استثناءً، لأنها تعتمد على بيانات اعتماد المستخدم للاتصال بـ AD. قد لا تكون هذه الطريقة هي الوسيلة الأكثر فعالية للتحقق من صحة بيانات الاعتماد. لتحسين الأداء. إذا كنت تعمل على .NET 3.5 أو أحدث (نعم، أنت تستخدم 4.6.1)، فيمكنك استخدام System.DirectoryServices.AccountManagement مساحة الاسم والتحقق بسهولة من بيانات الاعتماد الخاصة بك:

ج #
// 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");
}

المرجع: اقرأ كل شيء عنه هنا:

[^]

コメント

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