¿Cómo resolver una excepción de nombre de usuario o contraseña incorrectos al realizar la autenticación AD en C#?

programación


Recibo la excepción “Excepción de nombre de usuario o contraseña incorrectos” mientras realizo la autenticación AD en C#. Estoy usando asp.net con c# y el marco es 4.6.1. He configurado el modo de autenticación de Windows habilitado y anónimo deshabilitado. Recibo una excepción al alcanzar el código.

SearchResult sr = ds.FindOne();

.Hasta eso no hay excepción. Obtengo dominio, usuario de dominio, todo correctamente.

Lo que he probado:

Mi código es el siguiente:

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;

               }
           }

Solución 1

No se menciona ningún mensaje de error en la pregunta. Tenga en cuenta que si las credenciales son incorrectas, el método ds.FindOne() generará una excepción, ya que depende de las credenciales del usuario para conectarse a AD. Es posible que este método no sea el medio más eficaz para validar las credenciales. Para un mejor rendimiento. Si trabaja en .NET 3.5 o posterior (sí, está usando 4.6.1), puede usar el System.DirectoryServices.AccountManagement espacio de nombres y verifique fácilmente sus credenciales:

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

Referencia: Lea todo sobre esto aquí:

[^]

コメント

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