public new void ProcessRequest(HttpContext context)
        {
            try
            {
                if (context.Request.Form.Count > 0)
                {
                    this.entidade   = context.Request.Form["txtEntidade"];
                    this.login      = context.Request.Form["txtLogin"];
                    this.senha      = context.Request.Form["txtSenha"];
                    this.urlSistema = context.Request.Form["txtUrlSistema"];
                    var formato = context.Request.Form["formato"];

                    var provider = context.Request.Form["provider"];

                    if (FormatoValido(formato))
                    {
                        this.formato = formato;
                    }
                    Entrar();
                }
            }
            catch (Exception ex)
            {
                ApplicationWEB._GravaErro(ex);
                retorno.Mensagem = UtilBO.GetErroMessage("Erro ao tentar carregar o sistema.", UtilBO.TipoMensagem.Erro);
                UtilBO.MessageJSON(this.Context.Response.Output, retorno);
            }
        }
示例#2
0
        private void WriteResponse(HttpContext context, string destination, ResponseType responseSAML, string relayState)
        {
            try
            {
                // That UrlEncode should be used to encode only un-trusted values used within URLs such
                // as in query string values. If the URL itself is the source of un-trusted input, then
                // input validation with regular expressions should be used.
                // Fonte: Microsoft Anti-Cross Site Scripting Library V1.5 - User Guide, p-10.
                Regex regex = new Regex(@"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+=&%\$#_]*)?$", RegexOptions.IgnoreCase);
                if (!regex.IsMatch(destination))
                {
                    throw new ValidationException("A url contém um valor de entrada possivelmente perigoso, que pode indicar uma tentativa de comprometer a segurança do aplicativo.");
                }

                string samlResponse = SAMLUtility.SerializeToXmlString(responseSAML);
                samlResponse = HttpUtility.UrlEncode(samlResponse);
                string data = string.Format("SAMLResponse={0}&RelayState={1}", samlResponse, relayState);
                retorno.UrlRedirect      = destination;
                retorno.UrlRedirectParam = data;
                UtilBO.MessageJSON(context.Response.Output, retorno);
            }
            catch
            {
                throw;
            }
        }
        private void Entrar()
        {
            try
            {
                // Carrega os dados do usuário necessário para o login
                SYS_Usuario entityUsuario = new SYS_Usuario
                {
                    ent_id = new Guid(this.entidade)
                    ,
                    usu_login = this.login
                    ,
                    usu_senha = this.senha
                };

                // Checa as credenciais do usuário
                LoginStatus status   = SYS_UsuarioBO.LoginWEB(entityUsuario);
                var         mensagem = "";

                switch (status)
                {
                case LoginStatus.Erro:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Erro ao tentar entrar no sistema.", entityUsuario.usu_login);
                    mensagem         = "Erro ao tentar entrar no sistema.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Erro);
                    UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Bloqueado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Usuário bloqueado.", entityUsuario.usu_login);
                    mensagem         = "Usuário bloqueado.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    break;
                }

                case LoginStatus.NaoEncontrado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Usuário não encontrado.", entityUsuario.usu_login);
                    mensagem         = "Usuário e/ou senha inválidos.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);

                    UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    break;
                }

                case LoginStatus.SenhaInvalida:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Senha inválida.", entityUsuario.usu_login);
                    mensagem         = "Usuário e/ou senha inválidos.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Expirado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Senha expirada.", entityUsuario.usu_login);
                    mensagem         = "Senha expirada.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Sucesso:
                {
                    // Configura usuário na Session
                    LoadSession(entityUsuario);
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Login efetuado com sucesso.");

                    if (!string.IsNullOrEmpty(this.urlSistema))
                    {
                        //Chama o Login.ashx do site cliente.
                        this.Context.Response.Redirect(this.urlSistema, false);
                        HttpContext.Current.ApplicationInstance.CompleteRequest();
                    }
                    else
                    {
                        retorno.Mensagem = MensagemDeRetorno("sucesso", UtilBO.TipoMensagem.Alerta);
                        UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                    }

                    break;
                }
                }
            }
            catch (Exception ex)
            {
                ApplicationWEB._GravaErro(ex);
                retorno.Mensagem = UtilBO.GetErroMessage("Erro ao tentar entrar no sistema.", UtilBO.TipoMensagem.Erro);
                UtilBO.MessageJSON(this.Context.Response.Output, retorno);
            }
        }
示例#4
0
        public new void ProcessRequest(HttpContext context)
        {
            #region Trace

            // Write a trace message
            if (Trace.IsEnabled)
            {
                if (context.User != null)
                {
                    Trace.Write("context.User", context.User.ToString());
                    Trace.Write("context.User.Identity", context.User.Identity.ToString());
                    if (context.User.Identity is FormsIdentity)
                    {
                        Trace.Write("context.User.Identity.IsAuthenticated", context.User.Identity.IsAuthenticated.ToString());
                        if (context.User.Identity.IsAuthenticated)
                        {
                            FormsIdentity id = (FormsIdentity)context.User.Identity;
                            Trace.Write("FormsIdentity.Ticket.Name", id.Ticket.Name);
                            Trace.Write("FormsIdentity.Ticket.IssueDate", id.Ticket.IssueDate.ToString());
                        }
                    }
                }
                else
                {
                    Trace.Write("context.User", "NULL");
                }
            }

            #endregion Trace

            try
            {
                //// Verifica autenticação
                if (UserIsAuthenticated())
                {
                    if ((!String.IsNullOrEmpty(context.Request[HttpBindingConstants.SAMLRequest])) &&
                        (!String.IsNullOrEmpty(context.Request[HttpBindingConstants.RelayState])))
                    {
                        // Recupera Request
                        SAMLRequest = new SAMLAuthnRequest();
                        string request = HttpUtility.UrlDecode(context.Request[HttpBindingConstants.SAMLRequest]);
                        SAMLRequest.UnPackRequest(request.Replace(" ", "+"));

                        // Criação e configuração do Response
                        SAMLResponse = new ResponseType();
                        CreateSAMLResponse(context);

                        // Armazena dados do sistema emissor do Request
                        // em Cookie de sistemas autenticados
                        AddSAMLCookie(context);
                    }
                    else
                    {
                        throw new ValidationException("Não foi possível atender a solicitação, requisição inválida.");
                    }
                }
                else
                {
                    throw new ValidationException("Não foi possível atender a solicitação, o usuário não tem permissão de acesso ao sistema.");
                }
            }
            catch (ValidationException ex)
            {
                retorno.Mensagem = UtilBO.GetErroMessage(ex.Message, UtilBO.TipoMensagem.Alerta);
                UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }
            catch (Exception ex)
            {
                ApplicationWEB._GravaErro(ex);
                retorno.Mensagem = UtilBO.GetErroMessage("Não foi possível atender a solicitação.", UtilBO.TipoMensagem.Erro);
                UtilBO.MessageJSON(this.Context.Response.Output, retorno);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }
        }