none
¿Dónde consigo información sobre LDAP?

    Pregunta

  • Hola estoy tratando de hacer una conexión desde una aplicación MVC  ASP.NET-C# a mi directorio activo, pero la información que he conseguido es muy escasa y no está completa, ya puedo iniciar sesión y valida con el directorio activo pero no me trae los grupos.

    Si alguien tiene información por favor sería de mucha ayuda.

    viernes, 10 de agosto de 2018 20:22

Todas las respuestas

  • Ya lo solucioné:

    try
                    {
                        string ServerName = "dominio.com";
                        string BaseDN = "DC=dominio,DC=com";
                        String strUserDN = "OU=NombreCarpetaContieneUsuariosEnServidor, OU=NombreCarpetaQueContieneLaCarpetaUsuariosEnServidor";
                        string GroupName = "NombreGrupoAutorizado";
                        string AccountFilter = "sAMAccountName";
                        Boolean GroupUser = false;
                        // Buscar usuario
                        DirectoryEntry deSystem = new DirectoryEntry("LDAP://" + ServerName + "/" + strUserDN + "," + BaseDN);
                        deSystem.Username = UserName;
                        deSystem.Password = Password;
                        deSystem.AuthenticationType = AuthenticationTypes.Secure;

                        //Buscar el nombre de la cuenta
                        string strSearch = AccountFilter + "=" + UserName.Trim();
                        DirectorySearcher dsSystem = new DirectorySearcher(deSystem, strSearch);

                        //Subárbol de búsqueda de UserDN
                        dsSystem.SearchScope = SearchScope.Subtree;

                        //Encuentra los datos del usuario
                        SearchResult srSystem = dsSystem.FindOne();

                        //Traer los grupos a los que pertenece el usuario

                        ResultPropertyValueCollection valcol = srSystem.Properties["MemberOf"];


                        if (valcol.Count > 0)

                        {

                            foreach (object o in valcol)

                            {
                                String[] list = o.ToString().Split(',');
                                foreach (String d in list)
                                {
                                    if (d.Trim().StartsWith("CN="))
                                    {
                                        int lon = d.Length;
                                        if (lon > 3)
                                        {
                                            String name = d.Trim().Substring(3);
                                            // verificar que el usuario exista en el grupo que estamos buscando
                                            if (name.Trim().Equals(GroupName))
                                            {
                                                GroupUser = true;
                                                break;
                                            }
                                        }

                                    }
                                }

                            }

                        }

                        if (GroupUser == true)
                        {

                            FormsAuthentication.SetAuthCookie(UserName, false);
                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                return Redirect(returnUrl);
                            }
                            else
                            {
                                return RedirectToAction("Index", "Home");
                            }


                        }
                        else
                        {

                            String msg = "Usuario no pertenece al grupo=>" + GroupName;
                            String text = "<script language='JavaScript'>alert('" + msg + "')</script>";
                            System.Web.HttpContext.Current.Response.Write(text);
                        }

                    }

                    catch (Exception ex)

                    {

                        String msg = ex.Message.Trim();
                        String text = "<script language='JavaScript'>alert('" + msg + "')</script>";
                        System.Web.HttpContext.Current.Response.Write(text);
                    }

    Espero y le sirva :).

    • Propuesto como respuesta Enrique Aleman miércoles, 22 de agosto de 2018 14:51
    miércoles, 22 de agosto de 2018 12:39