none
Ayuda, Validar usuario contra Directorio Activo?

    Pregunta

  • Como puedo validar que un usuario este en el directorio activo en asp.net?

    Solo que el usuario exista, no poseo el password.

    Mil Gracias.

     

    viernes, 29 de julio de 2011 16:38

Respuestas

  • Muchas gracias Leandro, encontre esta forma que tambien puede servir:

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
                                  txtDominio.Text,
                                  "DC=" + txtDominio.Text + ",DC=com");
    
            // Create an in-memory user object to use as the query example.
            UserPrincipal u = new UserPrincipal(ctx);
    
            // Set properties on the user principal object.
            //u.GivenName = txtUsuario.Text;
            u.SamAccountName = txtUsuario.Text;
            //u.Surname = "";      
                    
    
            // Create a PrincipalSearcher object to perform the search.
            PrincipalSearcher ps = new PrincipalSearcher();
    
            // Tell the PrincipalSearcher what to search for.
            ps.QueryFilter = u;
    
            // Run the query. The query locates users 
            // that match the supplied user principal object. 
            PrincipalSearchResult<Principal> results = ps.FindAll();
    
            foreach (Principal cr in results)
            {
              //Debug.Print(cr.Name)
              //USUARIO VALIDO
              listBox1.Items.Add(cr.Name);
              listBox1.Items.Add(cr.SamAccountName);
            }
    

     

    • Marcado como respuesta jdiegogp sábado, 30 de julio de 2011 17:52
    sábado, 30 de julio de 2011 17:52

Todas las respuestas

  • Hola,

     

    En principio y dandote un ejemplo rapido, podrias implementar algo asi. Recuerda importar el espacio de nombres

    using System.DirectoryServices;


    string Server = "Server2003";
    string ruta = "LDAP://"+Server+"/DC=test,DC=com";
    DirectoryEntry raiz = new DirectoryEntry();
    raiz.Path = ruta;
    raiz.AuthenticationType = AuthenticationTypes.Secure;
    raiz.Username = TextBox1.Text;
    raiz.Password = TextBox2.Text;

    string filtro = "sAMAccountName";
    string strSearch = filtro + "=" + TextBox1.Text;
    DirectorySearcher dsSystem = new DirectorySearcher(raiz, strSearch);
    dsSystem.SearchScope = SearchScope.Subtree;
    try
    {
        SearchResult srSystem = dsSystem.FindOne();
        Response.Write("Autenticacion Correcta");
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
    }

     

    Active directroy y asp.net

    Asp.net Funcionamiento con AD

     

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica
    viernes, 29 de julio de 2011 16:51
  • Me podrias ayudar: me genera el error: "El servidor no es funcional. "
    viernes, 29 de julio de 2011 17:53
  • has validado con el nombre o el ip de la pc que actua como cotnroladora de dominio ?

    o sea dodne esta el

    "LDAP://"+Server+"/DC=test,DC=com";

    el server alli valida que sea el server correcto

    tambie valida de poner el valor correcto en el DC que es el nombre que se le da al dominio

    cuando te autenticas seguramente pones un nombre de dominio, ese debe ir en DC


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 29 de julio de 2011 18:22
  • Hola,

     

    Verifica lo que te indica Leandro, por ejemplo una ruta normal para LDAP seria

    LDAP://Ip del servidor/DC=dominioEmpresa,DC=DominioEmpresa

     

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica
    viernes, 29 de julio de 2011 18:25
  • Estoy trabajando en un portatil win 7 no en un entorno de red, sera ese el problema?
    viernes, 29 de julio de 2011 18:35
  • Y entonces contra que dominio vas a validar? porque deberia existir un server con una instancia de AD instalada.

    Sino tienes contra que validar claro que te dará problema.

     

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica
    viernes, 29 de julio de 2011 18:44
  • claro es tal cual menciona Jason requieres de un servidor que este como cotnrolador de dominio de la red

    por lo general de un win 2003 o 2008 server

    sino te autenticas contra un dominio de windows no funciona Active Directory

    imagen

    como veras en la imagen el ultimo combo son los dominios a los cuales puedes autenticarte, en Win 7 es similar requeres justamente d eun dominio, no que el suaurio este en la pc local

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 29 de julio de 2011 19:26
  • entiendo el problema, habra forma de simularlo ya que no tengo acceso a una red? Gracias.
    viernes, 29 de julio de 2011 21:31
  • Hola,

     

    Porque no lo simulas con una maquina virtual, podrias utilizar algun software de virtualización, instalar windows server y Active Directory y simularlo. Claro que este en un proceso con un poco de tarea. Pero localmente me parece lo mejor.

    Luego podrias utilizar algo como esot

    AD Services

     

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica
    viernes, 29 de julio de 2011 21:56
  • Hay forma de validar contra el directorio activo sin tener el pasword del usuario, por ejemplo validar que el usuario:

     

    dominio\usuariopepito este activo en el directorio activo.

    Mil gracias.

    sábado, 30 de julio de 2011 15:33
  • hola

    Saber de nuestros Usuarios en LDAP, Rerellando un GridView desde una Consulta.

    podrias recuperar la lista de usuarios y luego de tener la lista validar si el que necesitas esta alli

     

    Nota: se que el ejemplo esta en vb.net pero esta bastante simple de entender, igualmente puede ayudarte con estas tools para convertir el codigo

    Convert C# to VB.NET

    Code Converter

    saludos

    esto respondi en el otra consulta

    http://social.msdn.microsoft.com/Forums/es/vcses/thread/2462862d-2248-4e25-84b1-5a6d30c087e8

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 30 de julio de 2011 17:21
  • Muchas gracias Leandro, encontre esta forma que tambien puede servir:

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
                                  txtDominio.Text,
                                  "DC=" + txtDominio.Text + ",DC=com");
    
            // Create an in-memory user object to use as the query example.
            UserPrincipal u = new UserPrincipal(ctx);
    
            // Set properties on the user principal object.
            //u.GivenName = txtUsuario.Text;
            u.SamAccountName = txtUsuario.Text;
            //u.Surname = "";      
                    
    
            // Create a PrincipalSearcher object to perform the search.
            PrincipalSearcher ps = new PrincipalSearcher();
    
            // Tell the PrincipalSearcher what to search for.
            ps.QueryFilter = u;
    
            // Run the query. The query locates users 
            // that match the supplied user principal object. 
            PrincipalSearchResult<Principal> results = ps.FindAll();
    
            foreach (Principal cr in results)
            {
              //Debug.Print(cr.Name)
              //USUARIO VALIDO
              listBox1.Items.Add(cr.Name);
              listBox1.Items.Add(cr.SamAccountName);
            }
    

     

    • Marcado como respuesta jdiegogp sábado, 30 de julio de 2011 17:52
    sábado, 30 de julio de 2011 17:52
  • Hola,

    En principio y dandote un ejemplo rapido, podrias implementar algo asi. Recuerda importar el espacio de nombres

    using System.DirectoryServices;


    string Server = "Server2003";
    string ruta = "LDAP://"+Server+"/DC=test,DC=com";
    DirectoryEntry raiz = new DirectoryEntry();
    raiz.Path = ruta;
    raiz.AuthenticationType = AuthenticationTypes.Secure;
    raiz.Username = TextBox1.Text;
    raiz.Password = TextBox2.Text;

    string filtro = "sAMAccountName";
    string strSearch = filtro + "=" + TextBox1.Text;
    DirectorySearcher dsSystem = new DirectorySearcher(raiz, strSearch);
    dsSystem.SearchScope = SearchScope.Subtree;
    try
    {
        SearchResult srSystem = dsSystem.FindOne();
        Response.Write("Autenticacion Correcta");
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
    }

    Active directroy y asp.net

    Asp.net Funcionamiento con AD

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica

    Hola Jasón,

    He utilizado tu codigo para mi directorio activo y va bien (yo en visual basic), pero lo que no me gusta es el tener que andar manejando exepciones para cuando el usuario y la contraseña no van bien.
    Tu código...
    try
    {
        SearchResult srSystem = dsSystem.FindOne();
        Response.Write("Autenticacion Correcta");
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
    }

     
    ¿Hay alguna manera de trabajar con credenciales incorrectas sin utilizar las excepciones?
    vamos, que puedas poner algo como:

                SearchResult srSystem = dsSystem.FindOne()
                If IsDBNull(srSystem) Then
                    `usuario y contraseña buenos haremos lo que tengamos que hacer
                Else
                    'usuario y contraseña malos, informar al usuario del error
                End If


    Empezando ;)

    miércoles, 4 de abril de 2012 7:03
  • Hola,

    En principio y dandote un ejemplo rapido, podrias implementar algo asi. Recuerda importar el espacio de nombres

    using System.DirectoryServices;


    string Server = "Server2003";
    string ruta = "LDAP://"+Server+"/DC=test,DC=com";
    DirectoryEntry raiz = new DirectoryEntry();
    raiz.Path = ruta;
    raiz.AuthenticationType = AuthenticationTypes.Secure;
    raiz.Username = TextBox1.Text;
    raiz.Password = TextBox2.Text;

    string filtro = "sAMAccountName";
    string strSearch = filtro + "=" + TextBox1.Text;
    DirectorySearcher dsSystem = new DirectorySearcher(raiz, strSearch);
    dsSystem.SearchScope = SearchScope.Subtree;
    try
    {
        SearchResult srSystem = dsSystem.FindOne();
        Response.Write("Autenticacion Correcta");
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
    }

    Active directroy y asp.net

    Asp.net Funcionamiento con AD

    Saludos,


    Hola a todos,

    He utilizado el codigo que había en este post para mi directorio activo y va bien (yo en visual basic), pero lo que no me gusta es el tener que andar manejando exepciones para cuando el usuario y la contraseña no van bien.
    Tu código...
    try
    {
        SearchResult srSystem = dsSystem.FindOne();
        Response.Write("Autenticacion Correcta");
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
    }


    ¿Hay alguna manera de trabajar con credenciales incorrectas sin utilizar las excepciones?
    vamos, que puedas poner algo como:

                SearchResult srSystem = dsSystem.FindOne()
                If IsDBNull(srSystem) Then
                    `usuario y contraseña buenos haremos lo que tengamos que hacer
                Else
                    'usuario y contraseña malos, informar al usuario del error
                End If

    Gracias!!


    Empezando ;)

    lunes, 9 de abril de 2012 6:20