private void LoginLocal() { //Comprobamos que el Nombre de Usuario contiene un Dominio var infoUser = Publicos.ComprobarDominioEnUsuario(txtUser.Text); infoUser.Dominio = cboDominio.Text; var result = false; //Comprobamos primero el tipo de Usuario if (GRPrincipal.Load(infoUser.Usuario, infoUser.Dominio)) { InfoUsuario.Initialize(); if (InfoUsuario.Instancia.Tipo) { result = GRPrincipal.Login(infoUser.Usuario, txtPass.Text, cboDominio.Text); } else { result = GRPrincipal.Login(infoUser.Usuario, GRCrypto.Encriptar(txtPass.Text)); } } else { throw new InvalidOperationException("El usuario no está inscrito para este Sistema"); } if (!result) { throw new SecurityException("El usuario o clave no son válidos!"); } }
/// <summary> /// Guarda los Cambios /// </summary> public new CambiarClave Save() { if (GRCrypto.Encriptar(RespuestaSecreta) != SecretAnswer && !ByPassClave) { throw new InvalidOperationException("La respuesta secreta no coincide!"); } return(base.Save()); }
private void DoInsertUpdate(SqlCommand cmd) { using (BypassPropertyChecks) { cmd.Parameters.AddWithValue("@IdUsuario", ID); cmd.Parameters.AddWithValue("@IdClave", Guid.NewGuid().ToString()); cmd.Parameters.AddWithValue("@Clave", GRCrypto.Encriptar(ClaveNueva)); cmd.Parameters.AddWithValue("@PreguntaSecreta", PreguntaSecreta); cmd.Parameters.AddWithValue("@RespuestaSecreta", GRCrypto.Encriptar(RespuestaSecreta)); } }
/// <summary> /// Cambia la contraseña de un usuario externo, si el campo es vacio se crea una contraseña, de lo contrario registra al constraseña enviada. /// </summary> /// <param name="request">Constraseña a registrar</param> /// <returns>Contraseña generada</returns> public static ResponseCambioClave CambiarClaveWeb(RequestCambioClave request) { ResponseCambioClave response = new ResponseCambioClave(); var publicCrypter = new SimpleInteroperableEncryption(); var info = GetInfoBasicaUsuariosByCodigo(new RequestInfoBasicaUsuarioDTO { CodigoUsuario = request.CodigoUsuario, Dominio = request.Dominio }); if (!info.Resultado.Success) { throw new InvalidOperationException("El usuario no existe!"); } if (info.InfoBasica.Tipo != "E") { throw new InvalidOperationException("Sólo los usuarios externos pueden cambiar su contraseña"); } //SI SE HA SOLICITADO CONTRASEÑA, SE VALIDA LA CONTRASEÑA ANTIGUA if (request.TipoCambioClave == TipoCambioClave.Ui) { // Comprobamos si el campo de Respuesta Secreta se encuentra lleno para validar // que el usuario se olvidó se contraseña y posteriormente hacer el cambio. if (string.IsNullOrEmpty(request.RespuestaSecreta)) { ResponseLoginUsuario responseLogin = Login(new RequestLogin { CodigoUsuario = request.CodigoUsuario, Clave = publicCrypter.Decrypt(request.ClaveAntigua), Dominio = request.Dominio, AcronimoAplicacion = request.Acronimo }); if (!responseLogin.Resultado.Success) { throw new Exception("La contraseña es incorrecta."); } } else { // Comprobamos que la respuesta a la pregunta Secreta sea válida. using (var ctx = new SeguridadEntities()) { var clave = (from clav in ctx.Claves where clav.IdUsuario == info.InfoBasica.IdUsuario && clav.Ultimo select new { RespuestaSecreta = clav.Respuesta }).FirstOrDefault(); if (clave != null) { if (clave.RespuestaSecreta != GRCrypto.Encriptar(request.RespuestaSecreta)) { throw new SecurityException("La respuesta secreta no coincide!"); } } } } } // En caso sea un reseteo de clave if (request.TipoCambioClave == TipoCambioClave.Sys) { request.ClaveAntigua = request.ClaveNuevaConfirmada = request.ClaveNueva = publicCrypter.Decrypt(request.ClaveNueva); } else { //DESENCRIPTAR LA CONTRASENIA request.ClaveAntigua = publicCrypter.Decrypt(request.ClaveAntigua); request.ClaveNueva = publicCrypter.Decrypt(request.ClaveNueva); request.ClaveNuevaConfirmada = publicCrypter.Decrypt(request.ClaveNuevaConfirmada); } Result result = ValidacionCambiarClaveWeb(request); if (result.Success == false) { throw new Exception(result.Message); } bool primeraClave = false; try { //Validamos si tiene Clave registrada. GRPrincipal.Load(request.CodigoUsuario, request.Dominio); } catch (DataPortalException ex) { if (ex.BusinessException != null) { if (ex.BusinessException.GetType() == typeof(UsuarioSinClaveException)) { //SI LA EXCEPCION ES USUARIOSINCLAVE SE LE CREA UNA CLAVE ActivarUsuario activarUsuario = ActivarUsuario.GetActivarUsuario(new FiltroUsuarios { Usuario = request.CodigoUsuario, Dominio = request.Dominio }); activarUsuario.PreguntaSecreta = activarUsuario.RespuestaSecreta = request.CodigoUsuario; activarUsuario.ClaveSecreta = activarUsuario.ConfirmarClave = request.ClaveNueva; activarUsuario.Save(); primeraClave = true; } } } if (!primeraClave) { var cambiarClave = CambiarClave.GetCambiarClave(new FiltroUsuarios { Usuario = request.CodigoUsuario, Dominio = request.Dominio }); cambiarClave.ClaveNueva = cambiarClave.ConfirmarClave = request.ClaveNueva; cambiarClave.RespuestaSecreta = string.IsNullOrEmpty(request.RespuestaSecreta) ? cambiarClave.SecretAnswer : request.RespuestaSecreta; CambiarClave.ByPassClave = true; cambiarClave.Save(); } response.Correo = info.InfoBasica.Correo; response.Nombres = info.InfoBasica.NombresCompletos; response.CodigoUsuario = request.CodigoUsuario; return(response); }
public static ResponseLoginUsuario Login(RequestLogin request) { var response = new ResponseLoginUsuario(); try { if (string.IsNullOrEmpty(request.Clave) || string.IsNullOrEmpty(request.CodigoUsuario)) { throw new InvalidOperationException("El usuario y clave son obligatorios."); } if (string.IsNullOrEmpty(request.AcronimoAplicacion)) { throw new InvalidOperationException("El acrónimo es obligatorio."); } // Desencriptamos el mensaje recibido. var cryptocon = new SimpleInteroperableEncryption(); request.Clave = cryptocon.Decrypt(request.Clave); //Comprobamos que el Nombre de Usuario contiene un Dominio var infoUser = new UserDomain { Usuario = request.CodigoUsuario, Dominio = request.Dominio }; //Guardamos en el GlobalContext el valor que se reciba del Acrónimo Csla.ApplicationContext.GlobalContext["Acronimo"] = request.AcronimoAplicacion; if (string.IsNullOrEmpty(request.Dominio)) { throw new InvalidOperationException("El dominio es obligatorio."); } var result = false; //Comprobamos primero el tipo de Usuario if (GRPrincipal.Load(infoUser.Usuario, infoUser.Dominio)) { InfoUsuario.Initialize(); if (InfoUsuario.Instancia.Tipo) // Si es interno { result = GRPrincipal.Login(infoUser.Usuario, request.Clave, request.Dominio); } else // Si es externo { result = GRPrincipal.Login(infoUser.Usuario, GRCrypto.Encriptar(request.Clave)); } } else { throw new InvalidOperationException("El usuario no está inscrito para este Sistema"); } if (!result) { throw new SecurityException("El usuario o clave no son válidos!"); } response.Resultado.Success = result; response.IdPerfilUsuario = InfoUsuario.Instancia.IdPerfilUsuario; } catch (DataPortalException ex) { response.Resultado.Message = ex.BusinessException.Message; } catch (Exception ex) { var msg = ex.Message; if (ex.InnerException != null) { msg = ex.InnerException.Message; } response.Resultado.Message = msg; } return(response); }