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); } }
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); } }
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(); } }