Example #1
0
        //[EnableCors(origins: "*", headers: "*", methods: "*")]
        public IHttpActionResult Post()
        {
            string usuario = String.Empty, clave = String.Empty;
            //error por defecto (credenciales incorrectas) (pesimista)
            //OWASP Secure Coding Best Practices (SBP) (#28, #33)

            /* 33. Authentication failure responses should not indicate which part of the authentication data was incorrect.
             * For example, instead of "Invalid username" or "Invalid password", just use "Invalid username and/or password" for both.
             * Error responses must be truly identical in both display and source code
             * https://www.owasp.org/index.php/OWASP_Secure_Coding_Practices_Checklist
             */
            IHttpActionResult res = Ok(-1);     //error generico por defecto (pesimista)

            // @ la casa
            bool NoSegTec = true;

            if (NoSegTec)
            {
                //modo desarrollo, brincarse la seguridad del TEC, usar datos alambrados

                //poner los datos en un oRespuesta<string> para continuar
                CxC.Objetos.Clases.oRespuesta <string> objResValidar = new oRespuesta <string>();

                //CxC.WebApi.WCF_Seguridad.TEC_Usuario datosUsuario = (CxC.WebApi.WCF_Seguridad.TEC_Usuario)resValidar.Data;

                //falta calcular nombreCompleto, JWToken para retornarlo de una vez

                DatosUsuario datosUsuarioExt = new DatosUsuario();
                datosUsuarioExt.Apellido1 = "Apellido1";
                datosUsuarioExt.Apellido2 = "Apellido2";
                datosUsuarioExt.Bloqueado = false;
                datosUsuarioExt.CorreoElectronicoANotificar = "*****@*****.**";
                datosUsuarioExt.CorreoElectronicoPrincipal  = "*****@*****.**";
                datosUsuarioExt.Departamento          = "DATIC";
                datosUsuarioExt.Descripcion           = "";
                datosUsuarioExt.DescripPuesto         = "Profesional en TI";
                datosUsuarioExt.Estado                = true;
                datosUsuarioExt.extension             = "2354";
                datosUsuarioExt.FechaCreacion         = new DateTime(1996, 2, 7);
                datosUsuarioExt.FechaExpiracion       = new DateTime(6155, 12, 31);
                datosUsuarioExt.FechaNacimiento       = new DateTime(1976, 4, 20);
                datosUsuarioExt.IdDepartamento        = 1;
                datosUsuarioExt.Identificacion        = "109360326";
                datosUsuarioExt.IdTipoUsuario         = 1;
                datosUsuarioExt.IdUsuario             = 1;
                datosUsuarioExt.NoCarnet              = "";
                datosUsuarioExt.Nombre                = "Nombre";
                datosUsuarioExt.OcupaCambioContrasena = false;
                datosUsuarioExt.Oficina               = "B6";
                datosUsuarioExt.TipoUsuario           = "1";
                datosUsuarioExt.UsuarioCreacion       = "1";
                datosUsuarioExt.UsuarioModificacion   = "1";
                datosUsuarioExt.UsuarioVencido        = false;


                datosUsuarioExt.NombreCompleto = datosUsuarioExt.Apellido1 + " " + datosUsuarioExt.Apellido2 + " " + datosUsuarioExt.Nombre;
                datosUsuarioExt.Id             = datosUsuarioExt.IdUsuario;
                datosUsuarioExt.LoginUsuario   = usuario;
                //genera el JW Token y le pone expiración por defecto de 1 hora (esto es renovable)
                datosUsuarioExt.JWToken         = JwtManager.GenerarToken(usuario);
                datosUsuarioExt.ExpiracionToken = DateTime.UtcNow.AddHours(24);


                //ya validó al usuario, obtiene los permisos (claims)
                //aca es donde ocupo obtener los permisos, luego de saber que las credenciales son válidas
                //TODO var consultaPermisos = ServiciosSeguridad.ConsultarPermisosUsuario(0, datosUsuario.IdUsuario, 0, 0, idUsuarioLogueado, usuarioLogueado, Utilitarios.Clases.Utilitarios.GetIpAddress(), "SessionId");

                var datosPermisos = new { };// consultaPermisos.ObjetoRespuesta;

                var datosCompletos = new
                {
                    datosUsuario  = datosUsuarioExt,
                    datosPermisos = datosPermisos
                };

                //validación correcta del usuario y pone los datos para set retornados los datos
                objResValidar.CodigoRespuesta  = 0;
                objResValidar.MensajeRespuesta = "";
                objResValidar.ObjetoRespuesta  = new JavaScriptSerializer().Serialize(datosCompletos);

                res = Ok(objResValidar);
            }
            else
            {
                try
                {
                    if (Request.Headers.Contains("usuario"))
                    {
                        usuario = Request.Headers.GetValues("usuario").FirstOrDefault();
                        if (Request.Headers.Contains("clave"))
                        {
                            clave = Request.Headers.GetValues("clave").FirstOrDefault();
                        }

                        var resValidar = ValidarUsuario(usuario, clave);

                        //poner los datos en un oRespuesta<string> para continuar
                        CxC.Objetos.Clases.oRespuesta <string> objResValidar = new oRespuesta <string>();
                        if (resValidar.Data.GetType().FullName == "CxC.WebApi.WCF_Seguridad.TEC_Usuario")
                        {
                            CxC.WebApi.WCF_Seguridad.TEC_Usuario datosUsuario = (CxC.WebApi.WCF_Seguridad.TEC_Usuario)resValidar.Data;

                            //falta calcular nombreCompleto, JWToken para retornarlo de una vez

                            DatosUsuario datosUsuarioExt = new DatosUsuario();
                            datosUsuarioExt.Apellido1 = datosUsuario.Apellido1;
                            datosUsuarioExt.Apellido2 = datosUsuario.Apellido2;
                            datosUsuarioExt.Bloqueado = datosUsuario.Bloqueado;
                            datosUsuarioExt.CorreoElectronicoANotificar = datosUsuario.CorreoElectronicoANotificar;
                            datosUsuarioExt.CorreoElectronicoPrincipal  = datosUsuario.CorreoElectronicoPrincipal;
                            datosUsuarioExt.Departamento          = datosUsuario.Departamento;
                            datosUsuarioExt.Descripcion           = datosUsuario.Descripcion;
                            datosUsuarioExt.DescripPuesto         = datosUsuario.DescripPuesto;
                            datosUsuarioExt.Estado                = datosUsuario.Estado;
                            datosUsuarioExt.extension             = datosUsuario.extension;
                            datosUsuarioExt.FechaCreacion         = datosUsuario.FechaCreacion;
                            datosUsuarioExt.FechaExpiracion       = datosUsuario.FechaExpiracion;
                            datosUsuarioExt.FechaNacimiento       = datosUsuario.FechaNacimiento;
                            datosUsuarioExt.IdDepartamento        = datosUsuario.IdDepartamento;
                            datosUsuarioExt.Identificacion        = datosUsuario.Identificacion;
                            datosUsuarioExt.IdTipoUsuario         = datosUsuario.IdTipoUsuario;
                            datosUsuarioExt.IdUsuario             = datosUsuario.IdUsuario;
                            datosUsuarioExt.NoCarnet              = datosUsuario.NoCarnet;
                            datosUsuarioExt.Nombre                = datosUsuario.Nombre;
                            datosUsuarioExt.OcupaCambioContrasena = datosUsuario.OcupaCambioContrasena;
                            datosUsuarioExt.Oficina               = datosUsuario.Oficina;
                            datosUsuarioExt.TipoUsuario           = datosUsuario.TipoUsuario;
                            datosUsuarioExt.UsuarioCreacion       = datosUsuario.UsuarioCreacion;
                            datosUsuarioExt.UsuarioModificacion   = datosUsuario.UsuarioModificacion;
                            datosUsuarioExt.UsuarioVencido        = datosUsuario.UsuarioVencido;


                            datosUsuarioExt.NombreCompleto = datosUsuario.Apellido1 + " " + datosUsuario.Apellido2 + " " + datosUsuario.Nombre;
                            datosUsuarioExt.Id             = datosUsuario.IdUsuario;
                            datosUsuarioExt.LoginUsuario   = usuario;
                            //genera el JW Token y le pone expiración por defecto de 1 hora (esto es renovable)
                            datosUsuarioExt.JWToken         = JwtManager.GenerarToken(usuario);
                            datosUsuarioExt.ExpiracionToken = DateTime.UtcNow.AddHours(1);


                            //ya validó al usuario, obtiene los permisos (claims)
                            //aca es donde ocupo obtener los permisos, luego de saber que las credenciales son válidas
                            var consultaPermisos = ServiciosSeguridad.ConsultarPermisosUsuario(0, datosUsuario.IdUsuario, 0, 0, idUsuarioLogueado, usuarioLogueado, Utilitarios.Clases.Utilitarios.GetIpAddress(), "SessionId");

                            var datosPermisos = consultaPermisos.ObjetoRespuesta;

                            var datosCompletos = new
                            {
                                datosUsuario  = datosUsuarioExt,
                                datosPermisos = datosPermisos
                            };

                            //validación correcta del usuario y pone los datos para set retornados los datos
                            objResValidar.CodigoRespuesta  = 0;
                            objResValidar.MensajeRespuesta = "";
                            objResValidar.ObjetoRespuesta  = new JavaScriptSerializer().Serialize(datosCompletos);

                            res = Ok(objResValidar);
                        }
                        else
                        {
                            objResValidar.CodigoRespuesta  = -1;
                            objResValidar.MensajeRespuesta = "Credenciales inválidas";
                        }
                        //fin poner datos...
                    }
                    else
                    {
                        //no viene el parametro usuario en el header
                        res = Ok(-2);                                                                   //SBP#33 - faltan credenciales pero genera credenciales incorrectas
                    }
                }
                catch (Exception ex)
                {
                    res = Ok(-1);           //error genérico
                }
            } //else del if (NoSecTec)
            return(res);
        }