Làm cách nào để giải quyết ngoại lệ tên người dùng hoặc mật khẩu không chính xác trong khi thực hiện xác thực AD trong C#?

lập trình


Tôi nhận được ngoại lệ “Ngoại lệ tên người dùng hoặc mật khẩu không chính xác” khi thực hiện Xác thực AD trong C#. Tôi đang sử dụng asp.net với c# và framework là 4.6.1. Tôi đã đặt chế độ xác thực Windows Đã bật và Đã tắt ẩn danh. Tôi nhận được ngoại lệ khi tiếp cận mã

SearchResult sr = ds.FindOne();

.Cho đến khi không có ngoại lệ nào ở đó. Tôi nhận được tên miền, người dùng tên miền một cách chính xác.

Những gì tôi đã thử:

Mã của tôi là như sau:

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;

               }
           }

Giải pháp 1

Không có bất kỳ thông báo lỗi nào được đề cập trong câu hỏi. Lưu ý, nếu thông tin xác thực không chính xác, phương thức ds.FindOne() sẽ đưa ra một ngoại lệ vì nó dựa vào thông tin xác thực của người dùng để kết nối với AD. Phương pháp này có thể không phải là phương tiện hiệu quả nhất để xác thực thông tin xác thực. Để cải thiện hiệu suất. Nếu bạn làm việc trên .NET 3.5 hoặc mới hơn (vâng, bạn đang sử dụng 4.6.1), bạn có thể sử dụng System.DirectoryServices.AccountManagement không gian tên và dễ dàng xác minh thông tin đăng nhập của bạn:

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

Tham khảo: Đọc tất cả về nó ở đây:

[^]

コメント

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