Exemplo n.º 1
0
        public AuthenticationResult SignIn(String username, String password)
        {
            ContextType authenticationType = ContextType.Domain;
            var         DBContext          = new DBEntities();
            var         user = from USUARIOS in DBContext.USUARIOS where (USUARIOS.USUARIO == username) select USUARIOS;
            USUARIOS    u    = new USUARIOS();
            AUDITORIAS  au   = new AUDITORIAS();

            if (user.Any())
            {
                foreach (var iuser in user)
                {
                    u = iuser;
                }
            }
            else
            {
                u.CONTRASENA = password;
                u.USUARIO    = username;
                u.IDROLE     = 2;
                DBContext.USUARIOS.Add(u);
                DBContext.SaveChanges();
            }
            au.USUARIOS  = u;
            au.ACCION    = "LDAP_REQUEST";
            au.TIMESTAMP = DateTime.Now;
            DBContext.AUDITORIAS.Add(au);
            DBContext.SaveChanges();

            PrincipalContext principalContext = new PrincipalContext(authenticationType);
            bool             isAuthenticated  = false;
            UserPrincipal    userPrincipal    = new UserPrincipal(principalContext);

            userPrincipal.SamAccountName = username;
            var searcher = new PrincipalSearcher(userPrincipal);

            try
            {
                isAuthenticated = principalContext.ValidateCredentials(username, password, ContextOptions.Negotiate);
                au           = new AUDITORIAS();
                au.USUARIOS  = u;
                au.ACCION    = "LDAP_CONNECT";
                au.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au);
                DBContext.SaveChanges();
                if (isAuthenticated)
                {
                    userPrincipal = searcher.FindOne() as UserPrincipal;
                }
            }
            catch (Exception)
            {
                au           = new AUDITORIAS();
                au.USUARIOS  = u;
                au.ACCION    = "LDAP_FAILED";
                au.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au);
                DBContext.SaveChanges();
                isAuthenticated = false;
                userPrincipal   = null;
            }

            if (!isAuthenticated || userPrincipal == null)
            {
                au           = new AUDITORIAS();
                au.USUARIOS  = u;
                au.ACCION    = "LDAP_BADLOGIN";
                au.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au);
                DBContext.SaveChanges();
                return(new AuthenticationResult("Usuario o Contraseña incorrectos"));
            }

            if (userPrincipal.IsAccountLockedOut())
            {
                au           = new AUDITORIAS();
                au.USUARIOS  = u;
                au.ACCION    = "LDAP_LOCKED";
                au.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au);
                DBContext.SaveChanges();
                return(new AuthenticationResult("Cuenta bloqueada"));
            }

            if (userPrincipal.Enabled.HasValue && userPrincipal.Enabled.Value == false)
            {
                au           = new AUDITORIAS();
                au.USUARIOS  = u;
                au.ACCION    = "LDAP_DISABLED";
                au.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au);
                DBContext.SaveChanges();
                return(new AuthenticationResult("Cuenta deshabilitada"));
            }
            au           = new AUDITORIAS();
            au.USUARIOS  = u;
            au.ACCION    = "LDAP_SUCCESS";
            au.TIMESTAMP = DateTime.Now;
            DBContext.AUDITORIAS.Add(au);
            DBContext.SaveChanges();
            var identity = CreateIdentity(userPrincipal);

            authenticationManager.SignOut(MyAuthentication.ApplicationCookie);
            authenticationManager.SignIn(new AuthenticationProperties()
            {
                IsPersistent = false
            }, identity);


            return(new AuthenticationResult());
        }
Exemplo n.º 2
0
        public virtual ActionResult Index(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            IAuthenticationManager authenticationManager = HttpContext.GetOwinContext().Authentication;
            var authService = new AdAuthenticationService(authenticationManager);

            var        DBContext = new DBEntities();
            var        user      = from USUARIOS in DBContext.USUARIOS where (USUARIOS.USUARIO == model.Username) select USUARIOS;
            USUARIOS   u         = new USUARIOS();
            AUDITORIAS au        = new AUDITORIAS();

            if (user.Any())
            {
                foreach (var iuser in user)
                {
                    u = iuser;
                }
            }
            else
            {
                u.CONTRASENA = model.Password;
                u.USUARIO    = model.Username;
                u.IDROLE     = 2;
                DBContext.USUARIOS.Add(u);
                DBContext.SaveChanges();
            }
            au.USUARIOS  = u;
            au.ACCION    = "REQ_SESION";
            au.TIMESTAMP = DateTime.Now;
            DBContext.AUDITORIAS.Add(au);
            DBContext.SaveChanges();

            var authenticationResult = authService.SignIn(model.Username, model.Password);

            AUDITORIAS au_r = new AUDITORIAS();

            au_r.USUARIOS  = u;
            au_r.ACCION    = "REQ_RESPONSE";
            au_r.TIMESTAMP = DateTime.Now;
            DBContext.AUDITORIAS.Add(au_r);
            DBContext.SaveChanges();

            if (authenticationResult.IsSuccess)
            {
                AUDITORIAS au_r2 = new AUDITORIAS();
                au_r2.USUARIOS  = u;
                au_r2.ACCION    = "REQ_SUCCESS";
                au_r2.TIMESTAMP = DateTime.Now;
                DBContext.AUDITORIAS.Add(au_r2);
                DBContext.SaveChanges();
                return(RedirectToLocal(returnUrl));
            }
            AUDITORIAS au_r3 = new AUDITORIAS();

            au_r3.USUARIOS  = u;
            au_r3.ACCION    = "REQ_FAILED";
            au_r3.TIMESTAMP = DateTime.Now;
            DBContext.AUDITORIAS.Add(au_r3);
            DBContext.SaveChanges();
            ModelState.AddModelError("", authenticationResult.ErrorMessage);
            return(View(model));
        }