public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            string sessionGuid = context.HttpContext.User.FindFirst("sessionId")?.Value;
            string userGuid    = context.HttpContext.User.FindFirst("userGuid")?.Value;

            ClaimsPrincipal contextPrincipal = context.HttpContext.User as ClaimsPrincipal;
            //obter as sessões do usuário.
            Session session = _newSessionService.ObterSessaoAtiva(userGuid);

            try
            {
                // se tiver alguma sessão expirada com menos de 15 minutos de diferença, renovar a sessão por mais 15 min.
                if (session == null)
                {
                    Session sessionToKeepAlive = _newSessionService.GetSessionToKeepAlive(userGuid);

                    if (sessionToKeepAlive != null)
                    {
                        SessionViewModel sessionVM = new SessionViewModel()
                        {
                            Session = sessionToKeepAlive
                        };

                        //SessionData precisa ser null pois ao serializar o SessionVm, acontece uma exception. SessionData não é relevante neste momento
                        sessionVM.Session.SessionData = null;

                        //renova a sessão do NewSessionService
                        var response = await _newSessionService.KeepAliveSession(sessionVM);

                        //renova sessão para acesso aos serviços do Backend
                        _sessionService.KeepAlive(Guid.Parse(userGuid));

                        _newSessionService.RenovarSessao(sessionToKeepAlive);
                    }
                    else
                    {
                        session = _newSessionService.ObterSessaoExpirada(userGuid);
                        _newSessionService.InvalidarSessao(session);
                        SessionViewModel sessionVM = new SessionViewModel()
                        {
                            Session = session
                        };
                        sessionVM.Session.SessionData = null;
                        await _newSessionService.InvalidateSession(sessionVM);

                        if (session == null || string.IsNullOrEmpty(sessionGuid) && userGuid == session.UserId.ToString())
                        {
                            loginRedirectPath = new RedirectToRouteResult(new RouteValueDictionary
                            {
                                { "action", Constants.LOGIN_PAGE_ACTION },
                                { "controller", Constants.LOGIN_PAGE_CONTROLLER }
                            });

                            context.Result = loginRedirectPath;
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Log.Information("Contact {@contact} retrieved from cache", contact);
                //_logger.Information("Teste - Info ");
                _logger.Error(ex.GetBaseException(), "AuthenticateAttribute - Usuario ->  {userGuid}", userGuid);
                //_logger.Warning("Teste Warning");

                loginRedirectPath = new RedirectToRouteResult(new RouteValueDictionary
                {
                    { "action", Constants.LOGIN_PAGE_ACTION },
                    { "controller", Constants.LOGIN_PAGE_CONTROLLER }
                });

                context.Result = loginRedirectPath;
                return;
            }

            await next();
        }
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            Guid   userGuid  = Guid.Empty;
            var    headers   = context.HttpContext.Request.Headers;
            string userToken = headers[Constants.API_SESSION_GUID];

            if (string.IsNullOrEmpty(userToken))
            {
                //loggar requisição sem token
                context.Result = new UnauthorizedResult();
                return;
            }

            Session session = _newSessionService.ObterSessaoUsuario(userToken);

            userGuid = Helpers.ValidateToken(userToken, _tokenConfigurations);

            SessionCookieClaimsObjects sessionData = new SessionCookieClaimsObjects();

            if (session != null)
            {
                sessionData = session.SessionData;
            }

            if (session == null || userGuid == Guid.Empty)
            {
                context.Result = new UnauthorizedResult();
                return;
            }

            session = _newSessionService.ObterSessaoAtiva(userGuid.ToString());

            Session sessionToKeepAlive = null;

            try
            {
                //renova sessão para acesso aos serviços do Backend
                _sessionService.KeepAlive(userGuid);

                // se tiver alguma sessão expirada com menos de 15 minutos de diferença, renovar a sessão por mais 15 min.
                if (!UsuarioTemContexto(userGuid.ToString()) || session == null)
                {
                    sessionToKeepAlive = _newSessionService.GetSessionToKeepAlive(userGuid.ToString());

                    if (sessionToKeepAlive != null)
                    {
                        SessionViewModel sessionVM = new SessionViewModel()
                        {
                            Session = sessionToKeepAlive
                        };

                        //SessionData precisa ser null pois ao serializar o SessionVm, acontece uma exception. SessionData não é relevante neste momentovar sessionData = sessionVM.Session.SessionData;
                        sessionVM.Session.SessionData = null;

                        //renova a sessão do NewSessionService
                        var response = await _newSessionService.KeepAliveSession(sessionVM);

                        //renova sessão para acesso aos serviços do Backend
                        //_sessionService.KeepAlive(userGuid);

                        sessionToKeepAlive.SessionData = sessionData;

                        _newSessionService.RenovarSessao(sessionToKeepAlive);
                    }
                    else
                    {
                        loginRedirectPath = new RedirectToRouteResult(new RouteValueDictionary
                        {
                            { "action", "LogoutAngular" },
                            { "controller", Constants.LOGIN_PAGE_CONTROLLER },
                            { "userGuid", userGuid }
                        });

                        context.Result = loginRedirectPath;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex.GetBaseException(), "ApiAuthFilter - Usuario ->  {userGuid}", userToken);

                loginRedirectPath = new RedirectToRouteResult(new RouteValueDictionary
                {
                    { "action", "LogoutAngular" },
                    { "controller", Constants.LOGIN_PAGE_CONTROLLER },
                    { "userGuid", userGuid }
                });

                context.Result = loginRedirectPath;
                return;
            }

            if (sessionToKeepAlive == null)
            {
                context.HttpContext.User = session.SessionData.Principal;
            }
            else
            {
                context.HttpContext.User = sessionToKeepAlive.SessionData.Principal;
            }

            await next();
        }