Ejemplo n.º 1
0
        public async Task <string> ValidateSessionToken(SessionViewModel sessionVM, SessionCookieClaimsObjects identity)
        {
            var baseUri = PegaUriBaseSession() + "api/session/ValidateSessionToken";

            var requestUri = $"{baseUri}";

            var httpResponse = await HttpRequestFactory.Post(requestUri, sessionVM);

            if (!httpResponse.IsSuccessStatusCode)
            {
                throw new Exception("Não foi possível realizar o login.");
            }

            var response = httpResponse.Content.ReadAsStringAsync()
                           .Result
                           .Replace("\\", "").Trim(new char[1] {
                '"'
            });                                               // Por algum motivo, o metodo ReadAsStringAsync() está serializando com \\ e "" extras.


            var token = JsonConvert.DeserializeObject <string>(response);

            //var res = response == "false" ? false : true;

            return(token);
        }
Ejemplo n.º 2
0
        public void InserirSessao(SessionViewModel sessionVM, SessionCookieClaimsObjects sessionData)
        {
            sessionVM.Session.SessionData = sessionData;
            var session = _userSessionData.Sessions.Find(x => x.UserId == sessionVM.Session.UserId);

            if (session != null)
            {
                InvalidarSessao(session);
            }
            _userSessionData.userSession = sessionVM.Session;
            _userSessionData.Sessions.Add(sessionVM.Session);
        }
        private SessionCookieClaimsObjects SetUpSessionData(SessionCookieClaimsObjects SessionCookies, Guid sessionId)
        {
            SessionCookies.Identity.AddClaim(new Claim("sessionId", sessionId.ToString()));

            return(SessionCookies);
        }
        private async Task <JsonReturn> TryLoginAngular(LoginViewModel usuario)
        {
            User user = new User(usuario.UserName, usuario.Senha, usuario.Domain, usuario.RememberMe);

            _logger.Information("Login web Iniciado : Usuario -> {@LoginViewModel}", usuario);
            LoginResponse login = await _loginService.Login(user);

            if (login.Authenticated == false)
            {
                throw new UnauthorizedAccessException(login.Message);
            }

            _logger.Information("Login web realizado: Usuario -> {@LoginViewModel} - Usuario {@LoginResponse} ->", usuario, login);

            //instacia objeto de cookies e claim (esse metodo lê o Token, refatora-lo.
            SessionCookieClaimsObjects SessionCookieClaims = SetUpLoginData(login);

            //Converte string userGuid recebido nas claims para tipo Guid
            usuario.GuidUser = Guid.Parse(SessionCookieClaims.Identity.FindFirst(x => x.Type == "userGuid").Value);

            //cria sessão inválida
            SessionResponse session = await _newSessionService.CreateInvalidSession(usuario, HttpContext.Request.Headers["User-Agent"]);

            //insere SessionId como claim.
            SessionCookieClaims = SetUpSessionData(SessionCookieClaims, session.Session.SessionId);

            int IdEscritorio = await _loginService.GetIdEscritorio(usuario.Domain);

            if (IdEscritorio == int.MinValue)
            {
                throw new UnauthorizedAccessException("Escritório Inválido. Tente novamente.");
            }

            _logger.Information("Login LO Iniciado : Usuario -> {@User} | Guid Escritório -> {@guidEscritorio}", user, IdEscritorio);

            //LoginOld() Metodo para realizar conexões soap com serviços antigos

            var LawOfficeContextDataLogon = await _loginService.LoginOld(usuario.GuidUser, user, IdEscritorio);

            _logger.Information("Login LO realizado : Usuario -> {@User} ", user);

            //instancia de sessionVM
            SessionViewModel sessionVM = new SessionViewModel(login.AccessToken, Constants.COOKIE_AUTHORIZATION_SCHEME, session.Session);

            //verifica se token é válido no serviço de sessão.
            string tokenValid = await _newSessionService.ValidateSessionToken(sessionVM, SessionCookieClaims);

            if (string.IsNullOrEmpty(tokenValid))
            {
                throw new UnauthorizedAccessException("Sessão inválida");
            }

            //se token for válido, atualiza a sessão para válida.
            SessionResponse sessionResponse = await _newSessionService.ActivateSession(sessionVM);

            sessionVM.Session            = sessionResponse.Session;
            sessionVM.Session.domainGuid = IdEscritorio;
            //if (string.IsNullOrEmpty(tokenValid))
            //{
            //    //Single Sign-On Session  https://docs.oracle.com/cd/E19316-01/820-3740/adrba/index.html
            //}

            _newSessionService.InserirSessao(sessionVM, SessionCookieClaims);

            //await HttpContext.SignInAsync(Constants.COOKIE_AUTHORIZATION_SCHEME, SessionCookieClaims.Principal);

            var retorno = new JsonReturn("Login realizado com sucesso!", HttpStatusCode.OK);

            Encryptor encr      = new Encryptor();
            string    contextLO = encr.Encriptar(LawOfficeContextDataLogon);

            retorno.Object = new LoginResponseViewModel(usuario.GuidUser, IdEscritorio, login.AccessToken, session.Session.MaximumSessionTime.ToString(), contextLO);

            return(retorno);
        }
Ejemplo n.º 5
0
        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();
        }