コード例 #1
0
        public ReponseApi GetCodeGoogle(DataGoogle par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try
            {
                if (string.IsNullOrEmpty(par.Emisor))
                {
                    res.Mensaje = "El Emisor no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.Cuenta))
                {
                    res.Mensaje = "La Cuenta no puede ser nula";
                }
                else
                {
                    //res = DobleFactor.ObtenerCodigoConfig(par.Emisor, par.Cuenta);
                }
            }
            catch (Exception ex)
            {
                //Log Error
                _logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #2
0
        public ReponseApi desencriptaTexto(ActiveResponse par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try
            {
                res.Codigo    = 0;
                res.Mensaje   = "";
                res.Respuesta = Encriptacion.DesencriptaResponse(par, par.Llave);
            }
            catch (Exception ex)
            {
                string pars = JsonSerializer.Serialize(par);

                try
                {
                    EjecucionSP.LogErrores("AccessADController", "validaCodigo", pars, ex.Message);
                }
                catch (Exception exc)
                {
                    _logger.Log(LogLevel.Error, exc, exc.Message);
                }
            }

            return(res);
        }
コード例 #3
0
        public static ReponseApi ReconfiguraToken(string app, string usuario, string email)
        {
            ReponseApi res = new ReponseApi();

            try
            {
                TwoFactorAuthenticator autenticador = new TwoFactorAuthenticator();
                ResponseQRGoogle       resGoogle    = new ResponseQRGoogle();
                var key                = TwoStepsAuthenticator.Authenticator.GenerateKey();
                var setupInfo          = autenticador.GenerateSetupCode(app, email, key, false, 4);
                var codigoRecuperacion = TwoStepsAuthenticator.CounterAuthenticator.GenerateKey();

                resGoogle.QRImagen     = setupInfo.QrCodeSetupImageUrl;
                resGoogle.LlaveSecreta = key;
                resGoogle.CodigoManual = setupInfo.ManualEntryKey;

                string idUsuario;
                idUsuario = EjecucionSP.ActualizaToken(usuario, app, key, setupInfo.ManualEntryKey, codigoRecuperacion);

                string cuerpoCorreo = "<h1>Código de Recuperación</h1><br>" + codigoRecuperacion;

                Correo.EnviarMensaje("*****@*****.**", "Configuración de Doble Factor para " + app, cuerpoCorreo);

                res.Codigo    = 1;
                res.Mensaje   = idUsuario;
                res.Respuesta = resGoogle;
            }
            catch (Exception ex)
            {
                res.Codigo  = 0;
                res.Mensaje = ex.Message;
            }

            return(res);
        }
コード例 #4
0
        public ReponseApi GetCodeMicrosoft(DataMicrosoft par)
        {
            ReponseApi      res         = new ReponseApi();
            QRFeatures      funciones   = new QRFeatures();
            QRCodeGenerator qrGenerator = new QRCodeGenerator();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try
            {
                if (string.IsNullOrEmpty(par.Emisor))
                {
                    res.Mensaje = "El Emisor no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.Cuenta))
                {
                    res.Mensaje = "La Cuenta no puede ser nula";
                }
                else
                {
                    ResponseQRMicrosoft resMicrosoft = new ResponseQRMicrosoft();

                    var        key              = TwoStepsAuthenticator.Authenticator.GenerateKey();
                    byte[]     inputBytes       = Encoding.ASCII.GetBytes(key);
                    string     base32           = Wiry.Base32.Base32Encoding.Standard.GetString(inputBytes);
                    string     codigoManual     = base32.Replace("=", null);
                    var        AuthenticatorUri = funciones.GenerateQrCodeUri(par.Cuenta, par.Emisor, key);
                    QRCodeData qrCodeData       = qrGenerator.CreateQrCode(AuthenticatorUri, QRCodeGenerator.ECCLevel.Q);


                    QRCode qrCode      = new QRCode(qrCodeData);
                    Bitmap qrCodeImage = qrCode.GetGraphic(4);

                    System.IO.MemoryStream ms = new MemoryStream();
                    qrCodeImage.Save(ms, ImageFormat.Png);
                    byte[] byteImage = ms.ToArray();
                    var    SigBase64 = Convert.ToBase64String(byteImage);

                    resMicrosoft.LlaveSecreta = key;
                    resMicrosoft.CodigoManual = codigoManual;
                    resMicrosoft.QRImagen     = "data:image/png;base64," + SigBase64;

                    res.Codigo    = 1;
                    res.Respuesta = resMicrosoft;
                }
            }
            catch (Exception ex)
            {
                //Log Error
                _logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #5
0
 protected ActionResult ResultatApi(ReponseApi reponseApi)
 {
     return(reponseApi.ReponseApiCodeStatut_ switch
     {
         200 => Ok(reponseApi),
         201 => Ok(reponseApi),
         400 => BadRequest(reponseApi),
         401 => Unauthorized(reponseApi),
         404 => NotFound(reponseApi),
         _ => null
     });
コード例 #6
0
        public ReponseApi ValidateCodeMicrosoft(DataValidateMicrosoft par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try
            {
                if (string.IsNullOrEmpty(par.Cuenta))
                {
                    res.Mensaje = "La Cuenta no puede ser nula";
                }
                else if (string.IsNullOrEmpty(par.Secreto))
                {
                    res.Mensaje = "El Emisor no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.Codigo))
                {
                    res.Mensaje = "El Codigo no puede ser nulo";
                }
                else
                {
                    var authenticator = new TwoStepsAuthenticator.TimeAuthenticator();

                    bool isok = authenticator.CheckCode(par.Secreto, par.Codigo, par.Cuenta);

                    if (isok != true)
                    {
                        res.Mensaje = "El Código ingresado no es correcto";
                    }
                    else
                    {
                        res.Codigo  = 1;
                        res.Mensaje = "Código Válido";
                    }
                }
            }
            catch (Exception ex)
            {
                //Log Error
                _logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #7
0
        public ReponseApi ValidateCodeGoogle(DataValidateGoogle par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try {
                if (string.IsNullOrEmpty(par.Cuenta))
                {
                    res.Mensaje = "La Cuenta no puede ser nula";
                }
                else if (string.IsNullOrEmpty(par.Emisor))
                {
                    res.Mensaje = "El Emisor no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.Codigo))
                {
                    res.Mensaje = "El Codigo no puede ser nulo";
                }
                else
                {
                    // registrar validar dos factores
                    TwoFactorAuthenticator autenticador = new TwoFactorAuthenticator();
                    bool PinOK = autenticador.ValidateTwoFactorPIN(par.Cuenta, par.Codigo);

                    if (PinOK != true)
                    {
                        res.Mensaje = "El Código ingresado no es correcto";
                    }
                    else
                    {
                        res.Codigo  = 1;
                        res.Mensaje = "Código Válido";
                    }
                }
            } catch (Exception ex) {
                //Log Error
                _logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #8
0
        public ReponseApi ReconfigurarToken(ReconfiguraUsuario par)
        {
            ReponseApi       res   = new ReponseApi();
            ResponseQRGoogle codQR = new ResponseQRGoogle();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try {
                var resultCodigo = EjecucionSP.ReconfigurarToken(par.Usuario, par.App, par.CodigoRecuperacion);

                if (resultCodigo.IndexOf('@') != -1)
                {
                    string[] datos = resultCodigo.Split('|');
                    codQR = Login.reconfiguraUsuario(par.App, par.Usuario, datos[0], datos[1]).Result;

                    res.Codigo    = 1;
                    res.Mensaje   = "";
                    res.Respuesta = codQR;
                }
                else
                {
                    res.Codigo  = 0;
                    res.Mensaje = resultCodigo;
                }
            } catch (Exception ex) {
                string pars = JsonSerializer.Serialize(par);

                try {
                    EjecucionSP.LogErrores("AccessADController", "validaCodigo", pars, ex.Message);
                } catch (Exception exc) {
                    _logger.Log(LogLevel.Error, exc, exc.Message);
                }
            }

            return(res);
        }
コード例 #9
0
        public static ReponseApi ValidaCodigoDobleFactor(DataValidateGoogle par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try {
                //Obtener Llave Token
                string LlaveToken = EjecucionSP.ObtenerLlaveToken(par.Usuario, par.App);

                TwoFactorAuthenticator autenticador = new TwoFactorAuthenticator();
                bool PinOK = autenticador.ValidateTwoFactorPIN(LlaveToken, par.Codigo);

                if (PinOK != true)
                {
                    res.Mensaje = "El Código ingresado no es correcto";
                }
                else
                {
                    res.Codigo  = 1;
                    res.Mensaje = "Código Válido";

                    ResponseValidateCode vdCode = new ResponseValidateCode();

                    vdCode.LlaveDesbloqueo = EjecucionSP.ActualizaEstatusDobleFactor(par.Usuario, par.App, "172.15.20.1");
                    res.Respuesta          = vdCode;
                }
            }
            catch (Exception ex)
            {
                //Log Error
                //_logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #10
0
        public ReponseApi GetCodeGoogle(DataGoogle par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try {
                if (string.IsNullOrEmpty(par.Emisor))
                {
                    res.Mensaje = "El Emisor no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.Cuenta))
                {
                    res.Mensaje = "La Cuenta no puede ser nula";
                }
                else
                {
                    TwoFactorAuthenticator autenticador = new TwoFactorAuthenticator();
                    ResponseQRGoogle       resGoogle    = new ResponseQRGoogle();
                    var key       = TwoStepsAuthenticator.Authenticator.GenerateKey();
                    var setupInfo = autenticador.GenerateSetupCode(par.Emisor, par.Cuenta, key, false, par.QRTamaño <= 0 ? 4 : par.QRTamaño);

                    resGoogle.QRImagen     = setupInfo.QrCodeSetupImageUrl;
                    resGoogle.LlaveSecreta = key;
                    resGoogle.CodigoManual = setupInfo.ManualEntryKey;

                    res.Codigo    = 1;
                    res.Respuesta = resGoogle;
                }
            } catch (Exception ex) {
                //Log Error
                _logger.Log(LogLevel.Error, ex, ex.Message);
            }

            return(res);
        }
コード例 #11
0
        public static MethodResponse <ResponseQRGoogle> reconfiguraUsuario(string app, string usuario, string email, string desbloqueo)
        {
            var Response = new MethodResponse <ResponseQRGoogle>();

            try {
                ResponseQRGoogle codQR = new ResponseQRGoogle();

                ReponseApi res = DobleFactor.ReconfiguraToken(app, usuario, email);

                codQR = res.Respuesta;

                int idUsuario = Int32.Parse(res.Mensaje);

                EjecucionSP.ActualizaLlaveDesbloqueo(idUsuario, app, desbloqueo);

                Response.Code   = 2;
                Response.Result = codQR;
            } catch (Exception ex) {
                throw ex;
            }

            return(Response);
        }
コード例 #12
0
        public ReponseApi validaCodigo(DataValidateGoogle par)
        {
            ReponseApi res = new ReponseApi();

            res.Codigo    = 0;
            res.Mensaje   = "";
            res.Respuesta = null;

            try {
                if (string.IsNullOrEmpty(par.Usuario))
                {
                    res.Mensaje = "El Usuario no puede ser nulo";
                }
                else if (string.IsNullOrEmpty(par.App))
                {
                    res.Mensaje = "La App no puede ser nula";
                }
                else if (string.IsNullOrEmpty(par.Codigo))
                {
                    res.Mensaje = "El Codigo no puede ser nulo";
                }
                else
                {
                    res = DobleFactor.ValidaCodigoDobleFactor(par);
                }
            } catch (Exception ex) {
                string pars = JsonSerializer.Serialize(par);

                try {
                    EjecucionSP.LogErrores("AccessADController", "validaCodigo", pars, ex.Message);
                } catch (Exception exc) {
                    _logger.Log(LogLevel.Error, exc, exc.Message);
                }
            }

            return(res);
        }
コード例 #13
0
        public static MethodResponse <ActiveResponse> loginUsuario(Credential user, int tipo)
        {
            var Response = new MethodResponse <ActiveResponse>();

            Validate       ActiveUser   = new Validate();
            GenerateToken  NewToken     = new GenerateToken();
            ActiveResponse objectActive = new ActiveResponse();
            int            expiraToken;

            BodyToken Token = new BodyToken();

            if (string.IsNullOrEmpty(user.User))
            {
                Response.Code    = 0;
                Response.Message = string.Format("El usuario no puede ser nulo");
            }
            else if (string.IsNullOrEmpty(user.Password))
            {
                Response.Code    = 0;
                Response.Message = string.Format("La contraseña no puede ser nula");
            }
            else if (string.IsNullOrEmpty(user.App))
            {
                Response.Code    = 0;
                Response.Message = string.Format("El código de aplicación no puede ser nulo");
            }
            else
            {
                try {
                    expiraToken = user.ExpiracionToken == 0 ? 60 : user.ExpiracionToken;

                    //Checar IP
                    //string ip = HttpContext.Connection.RemoteIpAddress.ToString();

                    var MetaDatos = ActiveUser.GetUserActive(user.User, user.Password, user.App, expiraToken, tipo);
                    if (MetaDatos.Code != 0)
                    {
                        //Requiere doble factor
                        bool requiere;
                        requiere = EjecucionSP.RequiereDobleFactor(user.App, MetaDatos.Result.Permisos.Area, MetaDatos.Result.Permisos.Perfil);

                        if (requiere)
                        {
                            int config;
                            //Valida si el usuario tiene configurado el token para doble factor
                            config = EjecucionSP.UsuarioConfigurado(user.User, user.App);

                            if (config > 0)
                            {
                                //Se devuelve el response encriptado
                                string llaveDesbloqueo = Encriptacion.GeneraLlave(config);

                                Response.Code             = 3;
                                Response.Result           = Encriptacion.EncriptaResponse(MetaDatos.Result, Encriptacion.GeneraLlave(config));
                                Response.Result.IDUsuario = config;

                                EjecucionSP.ActualizaLlaveDesbloqueo(config, user.App, llaveDesbloqueo);
                            }
                            else
                            {
                                //Si no está configurado se devuelve el código QR de configuración
                                ResponseQRGoogle codQR = new ResponseQRGoogle();

                                ReponseApi res = DobleFactor.ObtenerCodigoConfig(user.App, MetaDatos.Result.Apellidos,
                                                                                 MetaDatos.Result.Nombre, user.User, MetaDatos.Result.Telefono, MetaDatos.Result.Email);

                                codQR = res.Respuesta;

                                int idUsuario = Int32.Parse(res.Mensaje);

                                string llaveDesbloqueo = Encriptacion.GeneraLlave(idUsuario);

                                Response.Code             = 2;
                                Response.Result           = Encriptacion.EncriptaResponse(MetaDatos.Result, llaveDesbloqueo);
                                Response.Result.CodigoQR  = codQR;
                                Response.Result.IDUsuario = idUsuario;

                                EjecucionSP.ActualizaLlaveDesbloqueo(idUsuario, user.App, llaveDesbloqueo);
                            }
                        }
                        else
                        {
                            // todo paso bien
                            Response.Code   = 1;
                            Response.Result = MetaDatos.Result;

                            // genera token de seguridad
                            Token = NewToken.CreateToken(user.User, user.ExpiracionToken);

                            //Inserta registro en bitácora
                            EjecucionSP.BitacoraAcceso(user.User, user.App, "172.154.22.40");

                            // se añade al objeto token sus propiedades
                            //InformationToken infoToken = new InformationToken();

                            //infoToken.Token = Token.TokenCreated;
                            //infoToken.ExpiracionToken = Token.TimeToken;

                            //Response.Result.InformacionToken.Add(infoToken);
                        }
                    }
                    else
                    {
                        Response.Code    = 0;
                        Response.Message = MetaDatos.Message;
                    }
                } catch (Exception ex) {
                    throw ex;
                }
            }

            return(Response);
        }