public static JsonResult JsonNoSeleccionadoRol(string mensaje, SeleccionarRolViewModel modelRol, object usuarioView, string token) { manejadorExcepciones.HandleException(new GenericException(mensaje, mensaje)); var result = new JsonResult { Data = new { mensaje, roles = modelRol.Roles, usuario = usuarioView, miToken = token, autenticado = true }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; //Precondition Failed: HttpContext.Current.Response.StatusCode = 412; return(result); }
public JsonResult SeleccionarRol(SeleccionarRolViewModel seleccionarRolViewModel) { var tokenHeader = seleccionarRolViewModel.Token; var claveEncriptar = Base64.Encode(AppSettings.Get <string>(ConstantesWebConfig.CLAVE_ENCRYPTACION)); var tokenResult = Token.DecodeToken(claveEncriptar, tokenHeader); if (!tokenResult.Validated) { var mensaje = string.Empty; if (tokenResult.Errors[0].Equals(TokenValidationStatus.Expired)) { mensaje = string.Format("Su sesion ha expirado."); } else { if (tokenResult.Errors[0].Equals(TokenValidationStatus.WrongToken)) { mensaje = string.Format("El valor de token es invalido."); } } var result = StatusResponseHelper.JsonNoAutenticado(mensaje, false); return(result); } if (tokenResult.UserId != 0 && !string.IsNullOrWhiteSpace(seleccionarRolViewModel.RolCodigo)) { //Verificar q la cuenta no este asignada a otro usuario Usuario usuario = _repository.Get(tokenResult.UserId); if (usuario != null) { var result = AutentificarUsuario(usuario, null, seleccionarRolViewModel.RolCodigo); return(result); } } return(StatusResponseHelper.JsonNoAutenticado("El usuario o el Rol seleccionado no esta asociado", false)); }
public void OnAuthentication(AuthenticationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("AuthenticationTokenAttribute"); } //1. Saltar autorizacion, si el controlador o la accion tiene el atributo AllowAnonymousAttribute bool isAllowAnonymousAttribute = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined( typeof(AllowAnonymousAttribute), inherit: true); if (isAllowAnonymousAttribute) { return; } string tokenHeader = filterContext.HttpContext.Request.Headers["token"]; if (tokenHeader == null || tokenHeader.IsEmpty()) { var error = string.Format("No Autorizado no se encontro un token."); var result = StatusResponseHelper.JsonNoAutenticado(error, false); filterContext.Result = result; return; } var claveEncriptar = Base64.Encode(AppSettings.Get <string>(ConstantesWebConfig.CLAVE_ENCRYPTACION)); var tokenResult = Token.DecodeToken(claveEncriptar, tokenHeader); if (!tokenResult.Validated) { var mensaje = string.Empty; if (tokenResult.Errors[0].Equals(TokenValidationStatus.Expired)) { mensaje = string.Format("Su sesion ha expirado."); } else { if (tokenResult.Errors[0].Equals(TokenValidationStatus.WrongToken)) { mensaje = string.Format("El valor de token es invalido."); } } var result = StatusResponseHelper.JsonNoAutenticado(mensaje, false); filterContext.Result = result; return; } var _application = ServiceLocator.Current.GetInstance <IApplication>(); var _repository = ServiceLocator.Current.GetInstance <IUsuarioRepository <Usuario> >(); Usuario usuario = _repository.Get(tokenResult.UserId); //Para indicar que no se ha seleccionado un rol if (tokenResult.RolId == -1) { var _rolesUsuario = usuario.Roles; var modelRol = new SeleccionarRolViewModel(); foreach (var item in _rolesUsuario) { var rolView = new RolViewModel() { CodigoRol = item.Codigo, NombreRol = item.Nombre }; modelRol.Roles.Add(rolView); } var usuarioView = new { usuId = usuario.Id, version = usuario.VersionRegistro, usuNombres = usuario.Nombres, usuApellidos = usuario.Apellidos, usuIdentificacion = usuario.PersonaId, usuDireccion = "", usuUsuario = usuario.Cuenta, usuClave = "", usuCorreo = usuario.Correo, usuEstado = usuario.Estado }; var result = StatusResponseHelper.JsonNoSeleccionadoRol("No se ha seleccionado un rol.", modelRol, usuarioView, tokenHeader); filterContext.Result = result; return; } var _rolService = ServiceLocator.Current.GetInstance <IRolService>(); Rol rol = _rolService.Get(tokenResult.RolId); var _repositorySesion = ServiceLocator.Current.GetInstance <IRepository <Sesion> >(); var sesion = _repositorySesion.Get(tokenResult.SesionId); if (usuario == null) { var result = StatusResponseHelper.JsonNoAutenticado("No existe usuario para el valor de token", false); filterContext.Result = result; return; } if (rol == null) { var result = StatusResponseHelper.JsonNoAutenticado("No existe rol para el valor de token", false); filterContext.Result = result; return; } if (sesion == null) { var result = StatusResponseHelper.JsonNoAutenticado("No existe sesion para el valor de token", false); filterContext.Result = result; return; } //Establecer objetos de acceso _application.SetCurrentUser(usuario); _application.SetCurrentRol(rol); _application.SetCurrentSession(sesion); //TODO: JOR - Generar nuevo token con actualizacion de tiempo de creacion para la expiracion de sesiones var minutosExpiracionToken = Convert.ToInt32(AppSettings.Get <string>(ConstantesWebConfig.TOKEN_TIEMPOSESION)); var token = Token.GenerateToken(claveEncriptar, usuario.Id, rol.Id, tokenResult.SesionId, minutosExpiracionToken); //JOR:Token actualizado para nuevas peticiones filterContext.HttpContext.Response.AppendHeader("token", token); //base.OnActionExecuting(filterContext); }
public JsonResult Ingresar(LoginViewModel model) { if (model.Usuario != null && !model.Usuario.IsEmpty() && model.Password != null && !model.Password.IsEmpty()) { //1. Autentificacion contra Membership var proveedorMembresia = Membership.Provider; model.Usuario = model.Usuario.Trim(); MembershipUser user = Membership.GetUser(model.Usuario); if (user == null) { Log.DebugFormat("No existe el usuario [{0}]", model.Usuario); var error = "Usuario ó Clave incorrecta"; var result = StatusResponseHelper.JsonNoAutenticado(error, true); return(result); } if (!user.IsApproved) { var error = string.Format("El usuario [{0}], se encuentra pendiente de activación, revice su correo o contáctese con soporte.", model.Usuario); var result = StatusResponseHelper.JsonNoAutenticado(error, true); return(result); } //1.1. Usuario Bloqueado //if (user.IsLockedOut) //{ // var mensaje = // string.Format("El usuario " + model.Usuario + ", se encuentra bloqueado"); // logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); // ModelState.AddModelError("", string.Format("El usuario [{0}], se encuentra bloqueado", model.Usuario)); // return IntentarIngreso(model); //} //TODO: Personalizar mensajes de AD //try //{ // var server = ConfigurationManager.AppSettings["Udla.CarpetaLinea.Url.ActiveDirectory"]; // var entry = new DirectoryEntry(server, model.Usuario, model.Password); // var nativeObject = entry.NativeObject; //} //catch (DirectoryServicesCOMException cex) //{ // //TODO: Capturar por codigos de excepciones. // if (cex.ExtendedErrorMessage.Contains("532")) // { // var mensaje = // string.Format("La contraseña del usuario " + model.Usuario + ", se encuentra expirada"); // logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); // ModelState.AddModelError("", string.Format("La contraseña del usuario [{0}] está expirada. Por favor utilice la opción 'Cambiar contraseña'", model.Usuario)); // ViewBag.ShowLink = false; // return IntentarIngreso(model); // } // else if (cex.ExtendedErrorMessage.Contains("773")) // { // var mensaje = // string.Format("El usuario " + model.Usuario + ", debe cambiar la contraseña"); // logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); // ModelState.AddModelError("", string.Format("El usuario [{0}] debe cambiar la contraseña", model.Usuario)); // return IntentarIngreso(model); // } // else if (cex.ExtendedErrorMessage.Contains("775")) // { // //TODO JLA: Personalizar mensaje contra tiempo de duracion de bloqueo // var minutes = getLockoutDuration(model.Usuario); // var mensaje = // string.Format("El usuario " + model.Usuario + ", se encuentra bloqueado"); // logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); // ModelState.AddModelError("", string.Format("El usuario [{0}] se encuentra bloqueado. Por favor intentarlo en [{1}] minutos", model.Usuario, minutes)); // return IntentarIngreso(model); // } //} var membresia = proveedorMembresia.ValidateUser(model.Usuario, model.Password); if (membresia) { Usuario usuario = _repository.Get(model.Usuario); if (usuario.PersonaId.HasValue) { var persona = _repositoryPersona.Get((int)usuario.PersonaId); usuario.Nombres = persona.PrimerNombre + " " + persona.SegundoNombre; usuario.Apellidos = persona.PrimerApellido + " " + persona.SegundoApellido; usuario.Identificacion = persona.Identificacion; usuario.Correo = persona.Correo; } else { usuario.Nombres = "Anonimo"; usuario.Apellidos = string.Empty; usuario.Identificacion = string.Empty; usuario.Correo = string.Empty; } if (usuario == null) { //var sincronizar_usuario_externo = _parametroService.GetValor<bool>(CodigosParametros.PARAMETRO_SEGURIDAD_SINCRONIZAR_USUARIOS_EXTERNOS); //if (sincronizar_usuario_externo) //{ // usuario = SincronizarUsuarioExterno(model.Usuario, infoExternal, rolesInternosExternos); //} //else //{ var error = string.Format("No existe el usuario [{0}]", model.Usuario); var result = StatusResponseHelper.JsonNoAutenticado(error, false); return(result); //} } var modelRol = new SeleccionarRolViewModel(); modelRol.UsuarioId = usuario.Id; modelRol.NombreUsuario = usuario.ToString(); modelRol.IPClient = model.IPClient; //Unir Roles asociados al usuario var _rolesUsuario = usuario.Roles; foreach (var item in _rolesUsuario) { var rolView = new RolViewModel() { CodigoRol = item.Codigo, NombreRol = item.Nombre }; modelRol.Roles.Add(rolView); } if (modelRol.Roles.Count == 1) { var mensaje = string.Format("El usuario {0}, ingresa por defecto con el codigo de rol {1}", usuario, modelRol.Roles.FirstOrDefault().NombreRol); //Registro Auditoria - Hora de inicio de sesión en el sistema. logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); //Si unicamente existe un rol autentificar return(AutentificarUsuario(usuario, null, modelRol.Roles.FirstOrDefault().CodigoRol)); } else if (modelRol.Roles.Count > 1) { modelRol.Roles = modelRol.Roles.OrderBy(c => c.NombreRol).ToList(); var usuarioView = new { usuId = usuario.Id, version = usuario.VersionRegistro, usuNombres = usuario.Nombres, usuApellidos = usuario.Apellidos, usuIdentificacion = usuario.PersonaId, usuDireccion = "", usuUsuario = usuario.Cuenta, usuClave = "", usuCorreo = usuario.Correo, usuEstado = usuario.Estado }; var claveEncriptar = AppSettings.Get <string>(ConstantesWebConfig.CLAVE_ENCRYPTACION); var minutosExpiracionToken = Convert.ToInt32(AppSettings.Get <string>(ConstantesWebConfig.TOKEN_TIEMPOSESION)); //Se fija -1 al rol y sesion actual mientras el usuario elije un rol var token = Token.GenerateToken(Base64.Encode(claveEncriptar), usuario.Id, -1, -1, minutosExpiracionToken); var roles = (from x in modelRol.Roles let label = x.NombreRol let value = x.CodigoRol orderby x.NombreRol select new { label, value }); var result = new JsonResult { Data = new { roles, usuario = usuarioView, miToken = token, autenticado = true }, //ContentType = contentType, //ContentEncoding = contentEncoding, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; return(result); } else if (modelRol.Roles.Count == 0) { string error = string.Format("Usuario {0}, no posee roles establecidos para ingresar al sistema", model.Usuario); var mensaje = string.Format("El usuario {0}, no posee roles establecidos para ingresar al sistema", usuario); //Registro Auditoria - Hora de inicio de sesión en el sistema. logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); var result = StatusResponseHelper.JsonNoAutenticado(error, true); return(result); } } else { var mensaje = string.Format("El usuario {0}, ha intentado realizar Loguin en el sistema, usuario no autenticado", model.Usuario); //Registro Auditoria - Hora de intento de logueo en la aplicación. logAuditoria.Write(FUNCIONALIDAD_GESTION_USUARIOS.ACCION_LOGIN, mensaje); var result = StatusResponseHelper.JsonNoAutenticado("Usuario o contraseña incorrecto", true); return(result); } } var result1 = StatusResponseHelper.JsonNoAutenticado("Usuario o contraseña incorrecto", true); return(result1); }