public async Task <JsonReturn> LogoutAngular(Guid userGuid) { var retorno = new JsonReturn(); if (userGuid == Guid.Empty) { string token = Helpers.RetrieveUserTokenApi(HttpContext); userGuid = Helpers.ValidateToken(token, _tokenConfigurations); } try { //LogOut OLD await _sessionService.Logout(userGuid); //Remove os contextos antigos. _sessionService.RemoverTodosContextosDoUsuario(userGuid); //await HttpContext.SignOutAsync(Constants.COOKIE_AUTHORIZATION_SCHEME); //obtem a sessão ativa do usuário para invalidar a sessão. var session = _newSessionService.ObterSessaoAtiva(userGuid.ToString()); if (session != null) { //SessionData é setado como null pois acontece uma exception em que o objeto não consegue ser serializado. SessionData não é relevante nesse momento. session.SessionData = null; _newSessionService.InvalidarSessao(session); retorno.Status = HttpStatusCode.OK; retorno.Object = HttpStatusCode.Forbidden; retorno.Message = "Sessão encerrada"; return(retorno); } } catch (Exception ex) { //obtem a sessão ativa do usuário para invalidar a sessão. var session = _newSessionService.ObterSessaoAtiva(userGuid.ToString()); if (session != null) { _newSessionService.InvalidarSessao(session); } retorno.Status = HttpStatusCode.Unauthorized; retorno.Object = HttpStatusCode.Forbidden; retorno.Message = "Sua sessão expirou, por favor, logue novamente."; return(retorno); } retorno.Status = HttpStatusCode.Unauthorized; retorno.Object = HttpStatusCode.Forbidden; retorno.Message = "Sua sessão expirou, por favor, logue novamente."; return(retorno); }
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(); }