Example #1
0
      /// <summary>
      /// Busca un usuario con autenticacion
      /// Returna como parametro el resultado de loging
      /// </summary>
      /// <param name="userName">nombre de loging de usuario</param>
      /// <param name="password">password</param>
      /// <param name="loginResult">resultado de loging</param>
      /// <returns>DirectoryEntry</returns>
      DirectoryEntry User_Get(string userName, string password, out LoginResult loginResult)
      {
          DirectoryEntry userDirectoryEntry = null;

          loginResult = LoginResult.LOGIN_OK;
          SearchResult result = User_Get_Result(userName, _directoryEntrySearchRoot);

          //Si esl resultado de busqueda en nodes es nulo el usuario no exisate en el dominio
          if (result == null)
          {
              loginResult = LoginResult.LOGIN_USER_DOESNT_EXIST;
              return(null);
          }

          //PasswordExpired
          if (ADWrapper.GetProperty(result, ADProperties.PWDLASTSET) == "0")
          {
              loginResult = LoginResult.ERROR_PASSWORD_MUST_CHANGE;
              return(null);
          }



          //string str = EnlistValue(results);
          //si result no es nulo se puede crear una DirectoryEntry
          if (result != null)
          {
              userDirectoryEntry = new DirectoryEntry(result.Path, userName, password);
          }

          //Intenta obtener una propiedad para determinar si el usuario se logueo con clave correcta o no.-
          try
          {
              int userAccountControl = Convert.ToInt32(ADWrapper.GetProperty(userDirectoryEntry, ADProperties.USERACCOUNTCONTROL));
          }
          catch (TechnicalException te)
          {
              if (te.ErrorId == "4101")
              {
                  loginResult = LoginResult.LOGIN_USER_OR_PASSWORD_INCORRECT;
                  return(userDirectoryEntry);
              }
          }

          if (User_IsAccountActive(userDirectoryEntry) == false)
          {
              loginResult = LoginResult.LOGIN_USER_ACCOUNT_INACTIVE;
              return(userDirectoryEntry);
          }

          if (User_IsAccountLockout(userDirectoryEntry))
          {
              loginResult = LoginResult.LOGIN_USER_ACCOUNT_LOCKOUT;
              return(userDirectoryEntry);
          }


          return(userDirectoryEntry);
      }
Example #2
0
      /// <summary>
      /// Este metodo realiza una aperacion logica con el valor userAccountControl para deternçminar si la cuenta de usuario
      /// esta abilitada o no.-
      /// La bandera para determinar si la cuenta está activa es un valor binario (decimal = 2)
      /// Los valores predeterminados de UserAccountControl para  Usuario normal: 0x200 (512)
      /// </summary>
      /// <param name="de"></param>
      /// <returns></returns>
      public static bool User_IsAccountActive(DirectoryEntry de)
      {
          //Convierte UserAccountControl a la operacion logica
          int userAccountControl = Convert.ToInt32(ADWrapper.GetProperty(de, ADProperties.USERACCOUNTCONTROL));

          int userAccountControl_Disabled = Convert.ToInt32(ADAccountOptions.UF_ACCOUNTDISABLE);
          int flagExists = userAccountControl & userAccountControl_Disabled;

          return(flagExists == 0); //Si es = a 2 es por que esta DESHABILITADO (512 - 2)
      }
Example #3
0
      ///// <summary>
      ///// Obtiene un usuario sin pasar clave.-
      ///// </summary>
      ///// <param name="userName"></param>
      ///// <returns></returns>
      internal static SearchResult User_Get_Result(string userName, DirectoryEntry root)
      {
          DirectorySearcher deSearch = new DirectorySearcher(root);

          deSearch.Filter      = "(&(objectClass=user)(sAMAccountName=" + ADWrapper.FilterOutDomain(userName) + "))";
          deSearch.SearchScope = System.DirectoryServices.SearchScope.Subtree;
          SearchResult rs = deSearch.FindOne();

          deSearch.Dispose();
          return(rs);
      }
Example #4
0
        //public ADGroup(LdapEntry wLdapEntry)
        //{
        //    if (wLdapEntry.ContainsKey(ADProperties.NAME))
        //        _Name = wLdapEntry[ADProperties.NAME][0];

        //    if (wLdapEntry.ContainsKey(ADProperties.DISTINGUISHEDNAME))
        //        _Name = wLdapEntry[ADProperties.DISTINGUISHEDNAME][0];

        //    if (wLdapEntry.ContainsKey(ADProperties.DESCRIPTION))
        //        _Name = wLdapEntry[ADProperties.DESCRIPTION][0];

        //    if (wLdapEntry.ContainsKey(ADProperties.LOGINNAME))
        //        _Name = wLdapEntry[ADProperties.LOGINNAME][0];

        //    if (wLdapEntry.ContainsKey(ADProperties.OBJECTCATEGORY))
        //        _Name = wLdapEntry[ADProperties.OBJECTCATEGORY][0];

        //    if (wLdapEntry.ContainsKey(ADProperties.USERPRINCIPALNAME))
        //        _Domain = wLdapEntry[ADProperties.USERPRINCIPALNAME][0].Split('.').First();

        //    if (!String.IsNullOrEmpty(_DistinguishedName))
        //    {
        //        SetNameInfo(_DistinguishedName);
        //    }
        //}


        /// <summary>
        ///
        /// </summary>
        /// <param name="directoryGroup"></param>
        public ADGroup(DirectoryEntry directoryGroup)
        {
            String domainAddress;

            String userPrincipalName = ADWrapper.GetProperty(directoryGroup, ADProperties.USERPRINCIPALNAME);


            _Name = ADWrapper.GetProperty(directoryGroup, ADProperties.NAME);

            _DistinguishedName = ADWrapper.GetProperty(directoryGroup, ADProperties.DISTINGUISHEDNAME);

            _Description = ADWrapper.GetProperty(directoryGroup, ADProperties.DESCRIPTION);

            _FirstName = ADWrapper.GetProperty(directoryGroup, ADProperties.LOGINNAME);
            _Category  = ADWrapper.GetProperty(directoryGroup, ADProperties.OBJECTCATEGORY);
            _CN        = ADWrapper.GetProperty(directoryGroup, ADProperties.CONTAINERNAME);
            if (!string.IsNullOrEmpty(userPrincipalName))
            {
                domainAddress = userPrincipalName.Split('@')[1];
            }
            else
            {
                domainAddress = String.Empty;
            }

            if (!string.IsNullOrEmpty(domainAddress))
            {
                _Domain = domainAddress.Split('.').First();
            }

            //if (pDirectoryEntry.Properties.Contains("sAMAccountName"))
            //{
            //    base.Name = pDirectoryEntry.Properties["sAMAccountName"][0].ToString(); //Nombre usuario como aaguirre
            //    _CN = base.Name;
            //}
            //if (pDirectoryEntry.Properties.Contains("userPrincipalName"))
            //    _UserPrincipalName = pDirectoryEntry.Properties["userPrincipalName"][0].ToString();//Nombre usuario como [email protected]
            //if (pDirectoryEntry.Properties.Contains("name"))
            //    base.FullName = pDirectoryEntry.Properties["name"][0].ToString(); //Nombre completo

            //if (pDirectoryEntry.Properties.Contains("sAMAccountType"))
            //    _FirstName = pDirectoryEntry.Properties["sAMAccountType"][0].ToString();
            //if (pDirectoryEntry.Properties.Contains("objectCategory"))
            //    base.Category = pDirectoryEntry.Properties["objectCategory"][0].ToString();

            //ej:CN=GS_Comite_comunicacion_RW,OU=Seguridad,DC=Datacom,DC=org
            if (!String.IsNullOrEmpty(_DistinguishedName))
            {
                SetNameInfo(_DistinguishedName);
            }
        }
Example #5
0
        /// <summary>
        /// Busca un objeto <see cref="ADWrapper"/> si no lo encuentra intenta crearlo e insertarlo al diccionario.-
        /// La creacion del diccionario se hace para no instanciar cientos de veses la clase ADWrapper. ya que esta tarea requiere ,mas uso de CPU que el costo de mantener en memoria
        /// un diccionario con porcos ADWrapper.
        /// En el mundo reali no existiran gran cantidad de clases ADWrapper, pero si muchas quisa cientos de ejecuciones del metodos de autenticacio, q son los que
        /// crearian instancias de ADWrapper.-
        /// </summary>
        /// <param name="domainName">Nombre del dominio</param>
        /// <returns></returns>
        internal static ADWrapper Find_ADWrapper(string domainName)
        {
            // Si ADWrapper no esta en el diccionario lo intenta agregar
            if (_ADWrapperDictionary.ContainsKey(domainName) == false)
            {
                DomainUrlInfo di = StaticsValues.Find_DomainUrlInfo(domainName);
                ADWrapper     ad = new Fwk.Security.ActiveDirectory.ADWrapper(di.LDAPPath, di.Usr, di.Pwd);
                _ADWrapperDictionary.Add(domainName, ad);
                return(ad);
            }

            //Si el codigo pasa por aqui es por que existe
            return(_ADWrapperDictionary[domainName]);
        }
Example #6
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 DirectoryEntry  GetImpersonate_SearchRoot_DE()
 {
     try
     {
         return(new DirectoryEntry(_DomainUrlInfo.LDAPPath, _DomainUrlInfo.Usr, _DomainUrlInfo.Pwd, AuthenticationTypes.Secure));
     }
     catch (Exception e)// Cuando el usuario no existe o clave erronea
     {
         Exception          te1 = ADWrapper.ProcessActiveDirectoryException(e);
         TechnicalException te  = new TechnicalException(string.Format(Resource.AD_Impersonation_Error, te1.Message), te1.InnerException);
         ExceptionHelper.SetTechnicalException <ADWrapper>(te);
         te.ErrorId = "4103";
         throw te;
     }
 }
Example #7
0
        /// <summary>
        /// Busca un objeto <see cref="ADWrapper"/> si no lo encuentra intenta crearlo e insertarlo al diccionario.-
        /// La creacion del diccionario se hace para no instanciar cientos de veses la clase ADHelper. ya que esta tarea requiere ,mas uso de CPU que el costo de mantener en memoria 
        /// un diccionario con porcos ADHelper. 
        /// En el mundo reali no existiran gran cantidad de clases ADHelper, pero si muchas quisa cientos de ejecuciones del metodos de autenticacio, q son los que 
        /// crearian instancias de ADHelper.-
        /// </summary>
        /// <param name="domainName">Nombre del dominio</param>
        /// <returns></returns>
        internal static ADWrapper Find_ADHelper(string domainName)
        {
            // Si ADHelper no esta en el diccionario lo intenta agregar
            if(_ADHelperDictionary.ContainsKey(domainName) == false)
            {
                DomainUrlInfo di = StaticsValues.Find_DomainUrlInfo(domainName);
                ADWrapper ad = new Fwk.Security.ActiveDirectory.ADWrapper(di.LDAPPath,di.Usr,di.Pwd);
                _ADHelperDictionary.Add(domainName,ad);
                return ad;
            }

            //Si el codigo pasa por aqui es por que existe
            return _ADHelperDictionary[domainName];
            
          
        }
Example #8
0
      /// <summary>
      /// Este metodo realiza una aperacion logica con el valor userAccountControl para deternçminar si la cuenta de usuario
      /// esta habilitada o no.-
      /// La bandera para determinar si la cuenta está bloqueada es un valor binario (decimal = 16)
      /// Los valores predeterminados de UserAccountControl para  Usuario normal: 0x200 (512)
      /// En un dominio basado en Windows Server 2003, LOCK_OUT y
      /// PASSWORD_EXPIRED han sido reemplazados con un nuevo atributo denominado ms-DS-User-Account-Control-Computed
      /// </summary>
      /// <param name="de"></param>
      /// <returns></returns>
      public static bool User_IsAccountLockout(DirectoryEntry de)
      {
          //Convierte UserAccountControl a la operacion logica
          int userAccountControl = Convert.ToInt32(ADWrapper.GetProperty(de, ADProperties.USERACCOUNTCONTROL));
          int flag = userAccountControl & Convert.ToInt32(ADAccountOptions.UF_LOCKOUT);

          //int flag2 = 528 & Convert.ToInt32(ADAccountOptions.UF_LOCKOUT); -- solo para test
          //if (flag == 0)
          //    return false;
          //else
          //    return true;


          // UF_LOCKOUT = 16 en Decimal

          return(!(flag == 0));  // No estoy seguro de utilizar la return (flag == 16);  sentencia q apareentenmete seria =  ()
      }
Example #9
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="resultUserUser"></param>
        public ADUser(SearchResult resultUser)
        {
            String domainAddress;
            String userPrincipalName = ADWrapper.GetProperty(resultUser, ADProperties.USERPRINCIPALNAME);
            String domainName;

            _UserAccountControl = ADWrapper.GetProperty(resultUser, ADProperties.USERACCOUNTCONTROL);
            _firstName          = ADWrapper.GetProperty(resultUser, ADProperties.FIRSTNAME);

            _middleName = ADWrapper.GetProperty(resultUser, ADProperties.MIDDLENAME);

            _lastName = ADWrapper.GetProperty(resultUser, ADProperties.LASTNAME);

            _loginName = ADWrapper.GetProperty(resultUser, ADProperties.LOGINNAME);



            if (!string.IsNullOrEmpty(userPrincipalName))
            {
                domainAddress = userPrincipalName.Split('@')[1];
            }
            else
            {
                domainAddress = String.Empty;
            }

            if (!string.IsNullOrEmpty(domainAddress))
            {
                domainName = domainAddress.Split('.').First();
            }

            else
            {
                domainName = String.Empty;
            }

            _loginNameWithDomain = String.Format(@"{0}\{1}", domainName, _loginName);

            _streetAddress = ADWrapper.GetProperty(resultUser, ADProperties.STREETADDRESS);

            _city = ADWrapper.GetProperty(resultUser, ADProperties.CITY);

            _state = ADWrapper.GetProperty(resultUser, ADProperties.STATE);

            _postalCode = ADWrapper.GetProperty(resultUser, ADProperties.POSTALCODE);

            _country = ADWrapper.GetProperty(resultUser, ADProperties.COUNTRY);

            _company = ADWrapper.GetProperty(resultUser, ADProperties.COMPANY);

            _department = ADWrapper.GetProperty(resultUser, ADProperties.DEPARTMENT);

            _homePhone = ADWrapper.GetProperty(resultUser, ADProperties.HOMEPHONE);

            _extension = ADWrapper.GetProperty(resultUser, ADProperties.EXTENSION);

            _mobile = ADWrapper.GetProperty(resultUser, ADProperties.MOBILE);

            _fax = ADWrapper.GetProperty(resultUser, ADProperties.FAX);

            _emailAddress = ADWrapper.GetProperty(resultUser, ADProperties.EMAILADDRESS);

            _title = ADWrapper.GetProperty(resultUser, ADProperties.TITLE);

            _manager = ADWrapper.GetProperty(resultUser, ADProperties.MANAGER);

            if (!String.IsNullOrEmpty(_manager))
            {
                String[] managerArray = _manager.Split(',');

                _managerName = managerArray[0].Replace("CN=", "");
            }

            //_LockedOut = Convert.ToBoolean(resultUser.GetDirectoryEntry().InvokeGet("IsAccountLocked"));

            //_LoginResult = ADWrapper.User_Get_LoginResult(resultUser);
        }