Beispiel #1
0
        public BodyToken CreateToken(string Correo, int ExpritationToken)
        {
            BodyToken TokenCreado = new BodyToken();

            string llaveSecreta = "AXXI77700QRKNEJRNEJJ";

            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.UniqueName, Correo),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var Key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(llaveSecreta));
            var creds = new SigningCredentials(Key, SecurityAlgorithms.HmacSha256);
            //var expiracion = DateTime.UtcNow.AddMinutes(5);
            var expiracion = DateTime.Now.AddMinutes(ExpritationToken);

            JwtSecurityToken token = new JwtSecurityToken(
                issuer: "banorte.com",
                audience: "banorte.com",
                claims: claims,
                expires: expiracion,
                signingCredentials: creds);

            TokenCreado.TokenCreated = new JwtSecurityTokenHandler().WriteToken(token);
            TokenCreado.TimeToken    = expiracion.ToString();

            return(TokenCreado);
        }
Beispiel #2
0
        public BodyToken GeraToken(User usuario, TokenConfiguration pTokenConfigurations)
        {
            //SigningConfigurations signingConfigurations = new SigningConfigurations();

            BodyToken token = new BodyToken();

            try
            {
                ClaimsIdentity identity = new ClaimsIdentity(
                    new GenericIdentity(usuario.firstName, "Login"),
                    new[] {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                    new Claim(JwtRegisteredClaimNames.UniqueName, usuario.firstName)
                }
                    );

                //TODO: Alterar para que valores venham do appsetinhs.json
                DateTime dataCriacao   = DateTime.Now;
                DateTime dataExpiracao = dataCriacao +
                                         TimeSpan.FromHours(configuracaoToken.Hours);

                var handler       = new JwtSecurityTokenHandler();
                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer             = configuracaoToken.Issuer,
                    Audience           = configuracaoToken.Audience,
                    SigningCredentials = signingConfigurations.SigningCredentials,
                    Subject            = identity,
                    NotBefore          = dataCriacao,
                    Expires            = dataExpiracao
                });
                token.token             = handler.WriteToken(securityToken);
                token.dtStartToken      = DateTime.Now;
                token.dtExpirationToken = DateTime.Now.AddHours(pTokenConfigurations.Hours);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(token);
        }
        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);
        }