public static void Login(InfoCliente infoCliente, UsuarioEntity datosLogin, bool isPassHash = false, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES) { UsuarioEntity usuario = ValidateUser(datosLogin.Username); UsuarioEntity partyFather = new UsuarioEntity(); var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad(); ValidarAccesoAlSistema(usuario.IdUsuario); string userPass = isPassHash ? datosLogin.Pass : MAETools.HashMD5(datosLogin.Pass); if (usuario.Pass != userPass) { ManejarErrorDeAutenticacion(usuario, configuracionSeguridad, idAplicacion); } ValidarReseteoPassword(usuario); ValidarDiasCambioPassword(configuracionSeguridad.DiasCambioPassword, usuario); UserHelper.ValidaUsuarioActivo(configuracionSeguridad.MaximoDiasInactividad, usuario); if (usuario.Expiracion.HasValue && usuario.Expiracion.Value.Date <= DateTime.Now) { UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.UsuarioBloqueadoPorCtaExpirada); AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CUENTA_EXPIRADA, false, usuario.Username); } if (usuario.Proceso) { SessionHelper.InitSession(infoCliente, usuario, idAplicacion); } if (datosLogin.Agencia != null) { using (OrdenesContext mcc = new OrdenesContext()) { partyFather = (from d in mcc.Usuario where d.Username.Equals(datosLogin.Agencia) select d).FirstOrDefault(); PartyHierarchyEntity ph = (from d in mcc.PartyHierarchyEntities where d.IdPartyFather.Equals(partyFather.IdPersona) && d.IdPartyHijo.Equals(usuario.IdPersona) select d).FirstOrDefault(); if (ph == null) { AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_USUARIO_NO_HABILITADO_AGENCIA, false, usuario.Username, usuario.Agencia); } } } }
private static Guid DoLogIn(string userName, string Password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false, bool isValid = false) { UsuarioEntity usuario = new UsuarioEntity(); usuario.Username = userName; usuario.Pass = Password; usuario.Agencia = NombreAgencia; ResponseDoubleAuthentication response = new ResponseDoubleAuthentication(); Login(infoCliente, usuario, idAplicacion: tipoAplicacion); var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad(); if (!configuracionSeguridad.TieneDobleFactor || (configuracionSeguridad.TieneDobleFactor && isValid)) { using (OrdenesContext mcc = new OrdenesContext()) { usuario = (from d in mcc.Usuario where d.Username.Equals(userName) select d).FirstOrDefault(); } SessionHelper.InitSession(infoCliente, usuario, idAplicacion: tipoAplicacion); SetLoginExitoso(MAEUserSession.Instancia.IdUsuario); return(MAEUserSession.Instancia.InternalId); } var url = OrdenesApplication.Instance.ContextoAplicacion.Urls.Find(f => f.TipoUrl == ConfiguracionSistemaURLsEnumDestino.DoubleAuthentication); Guid guidToken = Guid.NewGuid(); //var telefono = CachingManager.Instance.GetPersonaById((int)CachingManager.Instance.GetUsuarioByUsername(userName).IdPersona).Phone; //response = OrdenesApplication.Instance.DoubleAuthenticationService.GetToken(guidToken, telefono, url.Url); //if (!response.IsOk) //{ // throw new M4TraderApplicationException(response.Error); //} return(guidToken); }
private static void ManejarErrorDeAutenticacion(UsuarioEntity usuario, ConfiguracionSeguridadEntity configuracionSeguridad, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES) { string codigo = CodeMensajes.ERR_AUTHENTICATEUSUARIO; usuario.CantidadIntentos = IncreaseIntentos(usuario); if (configuracionSeguridad.CantidadIntentosMaximo > 0) { if (usuario.CantidadIntentos >= configuracionSeguridad.CantidadIntentosMaximo) { UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.MaximosIntentos); codigo = CodeMensajes.ERR_ALCANZO_MAXIMO_INTENTOS; } } AdministradorControlErrores.EnviarExcepcion(codigo, false, usuario.Username); }
public static M4TraderUserSessionLogin Login(string userName, string password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false) { UserValido resultValidacion = new UserValido(); try { resultValidacion = ValidateUser(userName, password, infoCliente, tipoAplicacion, NombreAgencia, passHashed); } catch (SessionException ex) { resultValidacion.NeedNewPassword = true; resultValidacion.IsOK = false; resultValidacion.MensajeError = ex.Code; resultValidacion.TokenGuid = ""; } MAEUserSession usuarioSession = null; if (MAEUserSession.InstanciaCargada) { usuarioSession = MAEUserSession.Instancia; } M4TraderUserSessionLogin userSessionLogin = new M4TraderUserSessionLogin() { Ok = resultValidacion.IsOK, DobleAutenticacion = CachingManager.Instance.GetConfiguracionSeguridad().TieneDobleFactor, Message = resultValidacion.MensajeError, NeedNewPassword = resultValidacion.NeedNewPassword, TokenGuid = resultValidacion.TokenGuid, SessionId = (usuarioSession == null) ? "" : usuarioSession.ID, IdUsuario = usuarioSession.IdUsuario, IdTipoPersona = usuarioSession.IdTipoPersona, UserName = (usuarioSession == null) ? "" : usuarioSession.UserName, EstadoSistema = (usuarioSession == null) ? "" : usuarioSession.EstadoSistema, TipoPersona = (usuarioSession == null) ? "" : UserHelper.getNombreTipoPersona(usuarioSession.IdTipoPersona), NombrePersona = (usuarioSession == null) ? "" : UserHelper.GetNombrePersona(usuarioSession.IdPersona), FechaSistema = CachingManager.Instance.GetFechaSistema().FechaSistema, FechaFinalizacionSesion = (usuarioSession == null) ? DateTime.Now : usuarioSession.FechaFinalizacion, JavascriptAllowedCommands = (usuarioSession == null) ? new System.Collections.Generic.Dictionary <string, string>() :usuarioSession.JavascriptAllowedCommands, PermisosUsuario = (usuarioSession == null) ? new System.Collections.Generic.Dictionary <string, bool>() : usuarioSession.PermisosUsuario, LoginRealizado = (usuarioSession == null) ? false : usuarioSession.LoginRealizado, }; return(userSessionLogin); }
private static UserValido ValidateUser(string UserName, string Password, InfoCliente infoCliente, TipoAplicacion tipoAplicacion, string NombreAgencia = null, bool passHashed = false, bool isValid = false) { var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad(); Guid tokenGuid; UserValido response = new UserValido(); response.IsOK = false; try { if (string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(Password)) { response.MensajeError = "El nombre de usuario y la contraseña no pueden estar vacíos."; response.IsOK = false; return(response); } tokenGuid = DoLogIn(UserName, Password, infoCliente, tipoAplicacion, NombreAgencia, passHashed, isValid); if (tokenGuid != Guid.Empty) { response.IsOK = true; response.TokenGuid = tokenGuid.ToString(); int IdUsuario = CachingManager.Instance.GetUsuarioByUsername(UserName).IdUsuario; DTOPortfolio portfolioPorDefecto = CachingManager.Instance.GetPortfolioDefaultByIdUsuario(IdUsuario); if (portfolioPorDefecto == null) { response.MensajeError = "El Usuario debe tener al menos un portfolio por defecto!."; response.IsOK = false; return(response); } } else { response.MensajeError = "Verifique el nombre de usuario y contraseña."; response.IsOK = false; } } catch (M4TraderApplicationException ex) { if (ex.Codigo == "W100002") { response.MensajeError = "Por políticas de seguridad debe cambiar la contraseña."; response.IsOK = false; response.NeedNewPassword = true; return(response); } else { response.MensajeError = ex.Message; response.IsOK = false; } } catch (SessionException ex) { if (ex.Code == "W100002") { response.NeedNewPassword = true; response.MensajeError = "Por políticas de seguridad debe cambiar la contraseña."; response.IsOK = false; return(response); } else { response.MensajeError = ex.Message; response.IsOK = false; } } catch (Exception ex) { response.MensajeError = ex.Message; response.IsOK = false; } return(response); }
public static TokenResult ValidateToken(string userName, string token, string iP, Guid guidToken, string browser, TipoAplicacion idAplicacion) { var result = OrdenesApplication.Instance.DoubleAuthenticationService.ValidateToken(guidToken, userName, token); TokenResult tokenResult = new TokenResult(); if (result) { UsuarioEntity usuario = CachingManager.Instance.GetUsuarioByUsername(userName); InfoCliente infoCliente = new InfoCliente(Utils.GetIpAddress(), browser); SessionHelper.InitSession(infoCliente, usuario, idAplicacion); tokenResult.Ok = true; tokenResult.IdSesion = MAEUserSession.Instancia.ID; return(tokenResult); } else { tokenResult.Ok = false; } return(tokenResult); }
public static void InitSession(InfoCliente infoCliente, UsuarioEntity usuario, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES) { MAEUserSession userSession = new MAEUserSession(); var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad(); userSession.IdPersona = (int)usuario.IdPersona; userSession.IdUsuario = usuario.IdUsuario; userSession.Ip = infoCliente.Ip; userSession.Dispositivo = infoCliente.Dispositivo; userSession.FechaInicio = DateTime.Now; userSession.FechaFinalizacion = MAEDateTimeTools.DateTimeAdd(DateTime.Now, configuracionSeguridad.TimeOutInicialSesion, "s"); userSession.IdAplicacion = (byte)idAplicacion; userSession.UltimaActualizacion = usuario.UltimaActualizacion; userSession.ConfiguracionRegional = usuario.ConfiguracionRegional; //AESEncryptor encryptor = new AESEncryptor(); //userSession.Global = encryptor.GetUniqueKey(); //SecurityHelper.GetRSAKey(ref userSession); var clientKeyPair = PublicKeyBox.GenerateKeyPair(); var serverKeyPair = PublicKeyBox.GenerateKeyPair(); userSession.PrivateKey = Convert.ToBase64String(clientKeyPair.PrivateKey); userSession.PublicKey = Convert.ToBase64String(clientKeyPair.PublicKey); userSession.ClientPublic = Convert.ToBase64String(clientKeyPair.PublicKey); userSession.ClientSecret = Convert.ToBase64String(clientKeyPair.PrivateKey); userSession.ServerPublic = Convert.ToBase64String(serverKeyPair.PublicKey); userSession.ServerSecret = Convert.ToBase64String(serverKeyPair.PrivateKey); userSession.Nonce = Convert.ToBase64String(PublicKeyBox.GenerateNonce()); userSession.AllowedCommands = new Dictionary <string, Type>(); userSession.JavascriptAllowedCommands = new Dictionary <string, string>(); userSession.PermisosUsuario = new Dictionary <string, bool>(); List <Permiso> PermisosUsuario = CachingManager.Instance.GetAllPermisosByIdUsuario(userSession.IdUsuario); Dictionary <string, int> mapeoAcciones = new Dictionary <string, int>(); var Acciones = CachingManager.Instance.GetAllAcciones(); OrdenesApplication.Instance.GetComandosHabilitados(idAplicacion) .ForEach(cmd => { var k = OrdenesApplication.Instance.Encryptor.DynamicEncryption(cmd.FullName); userSession.AllowedCommands.Add(k, cmd.CommandType); userSession.JavascriptAllowedCommands.Add(cmd.Key, k); mapeoAcciones.Add(k, cmd.IdAccion); }); foreach (KeyValuePair <string, int> kv in mapeoAcciones) { Permiso p = PermisosUsuario.Find(x => x.IdAccion == kv.Value); if (p != null) { var permisoAccion = Acciones.Find(x => x.IdAccion == kv.Value).HabilitarPermisos; bool habilitado = (p.Permisos & permisoAccion) != 0; userSession.PermisosUsuario.Add(kv.Key, habilitado); } } CreateSesiones(userSession, (byte)idAplicacion); InsertarLogSeguridad((byte)LogCodigoAccionSeguridad.InicioSesion, "Inicio de sesión exitoso", (byte)idAplicacion); }
public static void Login(InfoCliente infoCliente, UsuarioEntity datosLogin, bool isPassHash = false, TipoAplicacion idAplicacion = TipoAplicacion.ORDENES) { UsuarioEntity usuario = ValidateUser(datosLogin.Username); var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad(); ValidarAccesoAlSistema(usuario.IdUsuario); string userPass = isPassHash ? datosLogin.Pass : MAETools.HashMD5(datosLogin.Pass); if (usuario.Pass != userPass) { ManejarErrorDeAutenticacion(usuario, configuracionSeguridad, idAplicacion); } ValidarReseteoPassword(usuario); ValidarDiasCambioPassword(configuracionSeguridad.DiasCambioPassword, usuario); UserHelper.ValidaUsuarioActivo(configuracionSeguridad.MaximoDiasInactividad, usuario); if (usuario.Expiracion.HasValue && usuario.Expiracion.Value.Date <= DateTime.Now) { UserHelper.BlockUsuarios(usuario.IdUsuario, (byte)LogCodigoAccionSeguridad.UsuarioBloqueadoPorCtaExpirada); AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CUENTA_EXPIRADA, false, usuario.Username); } if (usuario.Proceso) { SessionHelper.InitSession(infoCliente, usuario, idAplicacion); } }