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