public string GetToken(string username, string password)
        {
            var common         = new Common();
            var passwordResult = common.Decript(password, key);

            var passwordSHA256 = common.GenerateSHA256(passwordResult);

            var user = db.User.FirstOrDefault(x => x.Username == username &&
                                              x.Password == passwordSHA256);

            if (user == null)
            {
                return("Credenciales no validas !!!!");
            }

            var roles = db.UsersInRoles.Where(x => x.User.UserId == user.UserId)
                        .Select(x => x.Role.Name).ToArray();

            var token = new TokenSecurityModel
            {
                DisplayName = string.Concat("Mr ", user.Username),
                Expiration  = DateTime.Now.AddMinutes(1),
                Username    = username,
                Roles       = roles,
                id          = Guid.NewGuid()
            };

            var tokenString = JsonConvert.SerializeObject(token);
            var tokenBytes  = Encoding.UTF8.GetBytes(common.Encrypt(tokenString, key));

            return(Convert.ToBase64String(tokenBytes));
        }
        public TokenSecurityModel ValidateToken()
        {
            var requestToken = "R1lXbnJmTit5QTFITGdVWmJTUnRwMUFCTTVMWHVGNzAwTkZoUHZFVi9lNTRiME9BZFgxWi9JUVF5eXpsL0YrK3Q4U00vU1V2YUdzVEs4c25VVVlsYVZtcmRzRmxPZ0c1NXZTYUR0NWdDYkRCUXRhY3g1Ty95dWUyV2F2bnQvVTJ6eUx4QytwY2NzNURXeHFNb0JpL1FUMkZObHREZC9yYkRyUEdsb2dZVzkyNGR6TW11V2o5MVhRVSswV2VKU1M2YU9Mb0xEREM3emVYSXoxVVAvdWNFeERCdDQ1VEVNZlRGRDhrN3k5MTcycEVUdmY5cWdKdEhuUERHTjMrdVhheQ=="; //HttpContext.Current.Request["__TOKEN_SECURITY__"];

            if (string.IsNullOrEmpty(requestToken))
            {
                throw new Exception("Token invalido");
            }

            byte[]             tokenBytes         = Convert.FromBase64String(requestToken);
            string             tokenUTF8          = Encoding.UTF8.GetString(tokenBytes);
            string             tokenJSON          = new Common().Decript(tokenUTF8, key);
            TokenSecurityModel tokenSecurityModel = JsonConvert.DeserializeObject <TokenSecurityModel>(tokenJSON);

            if (tokenSecurityModel == null)
            {
                throw new Exception("Token invalido");
            }

            if (tokenSecurityModel.Expiration <= DateTime.Now)
            {
                throw new Exception("Token expirado");
            }

            return(tokenSecurityModel);
        }
Example #3
0
        /// <summary>
        /// Permite realizar la validación del token
        /// </summary>
        /// <returns></returns>
        public TokenSecurityModel ValidateToken()
        {
            var requestToken = HttpContext.Current.Request.Headers["__TOKEN_SECURITY__"];

            if (string.IsNullOrEmpty(requestToken))
            {
                throw new Exception("Token Invalido");
            }

            //Obtiene los bytes desde el base64 generado en el token
            byte[] TokenBytes = Convert.FromBase64String(requestToken);
            //obtengo la codificación UTF8 del token
            string TokenUTF8Hash = Encoding.UTF8.GetString(TokenBytes);
            //se obtiene el Json de la codificación
            string tokenJSON = new Common().Decrypt(TokenUTF8Hash, key);

            //se obtiene el TOKEN
            TokenSecurityModel tokenSecurityModel =
                JsonConvert.DeserializeObject <TokenSecurityModel>(tokenJSON);

            if (tokenSecurityModel == null)
            {
                throw new Exception("Token Invalido");
            }

            if (tokenSecurityModel.Expiration <= DateTime.Now)
            {
                throw new Exception("Token Expirado");
            }

            //se obtiene el token con la información genrada
            return(tokenSecurityModel);
        }
Example #4
0
        /// <summary>
        /// Creates the user.
        /// </summary>
        /// <param name="username">The username.</param>
        /// <param name="password">The password.</param>
        /// <returns></returns>
        public ResponseModel CreateUser(string username, string password)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(username))
                {
                    throw new ArgumentNullException("username");
                }

                if (string.IsNullOrWhiteSpace(password))
                {
                    throw new ArgumentNullException("password");
                }

                TokenSecurityModel token = ValidateToken();
                if (!token.Roles.Any(x => x == "admin"))
                {
                    throw new Exception("No tiene permisos");
                }


                //Validar que no exista el usuario,

                if (db.User.Any(x => x.Username == username))
                {
                    return new ResponseModel {
                               Message = "Usuario Existente"
                    }
                }
                ;

                //El parámetro password llega encryptado con el algoritmo Rindjael
                var common         = new Common();
                var passwordResult = common.Decrypt(password, key);
                var passwordSHA256 = common.GenerateSHA256(passwordResult);

                db.User.Add(new User
                {
                    DateCreate     = DateTime.Now,
                    DateUpdate     = DateTime.Now,
                    FailedAttempts = 0,
                    Username       = username,
                    Password       = passwordSHA256,
                    UserId         = Guid.NewGuid()
                });

                db.SaveChanges();

                return(new ResponseModel {
                    Message = "Usuario agregado con exito"
                });
            }
            catch (Exception ex)
            {
                return(new ResponseModel {
                    Message = ex.Message, Exception = ex, IsError = true
                });
            }
        }
Example #5
0
        public string GetToken(string username, string password)
        {
            var common         = new Common();
            var passwordResult = common.Decrypt(password, key);
            var passwordSHA256 = common.GenerateSHA256(passwordResult);
            var user           = db.User.FirstOrDefault(x => x.Username == username && x.Password == passwordSHA256);

            if (user == null)
            {
                return("Credenciales no validas");
            }
            //Obtener los nombre de los roles autorizados por el usuario
            var roles = db.UsersInRoles.Where(x => x.User.UserId == user.UserId)
                        .Select(x => x.Role.Name).ToArray();
            //se establece la entidad del token con un tiempo de expiración fijo de 1 minuto
            var token = new TokenSecurityModel
            {
                DisplayName = string.Concat("Mr ", user.Username),
                Expiration  = DateTime.Now.AddHours(1),
                Username    = user.Username,
                Roles       = roles,
                id          = Guid.NewGuid()
            };

            #region Comments
            //Se serializa a formato JSON (Javascript Serialization Object Notation) el token

            /*
             *  {
             *      'DisplayName': 'Mr svargas',
             *      'Expiration' : '1246843218798654', // UTC del Fecha y Hora
             *      'Username': '******'
             *      'Roles': [{'admin', 'sadmin', 'operador'}]
             *  }
             */
            #endregion
            var tokenString = JsonConvert.SerializeObject(token);
            //Se cifra y se codifica a UTF 8 el resultado obteniendo los bytes de la codificación
            var tokenBytes = Encoding.UTF8.GetBytes(common.Encrypt(tokenString, key));
            //Se retorna la codificación a Base64 para su transporte por HTTP
            return(Convert.ToBase64String(tokenBytes));
        }