public new void ProcessRequest(HttpContext context) { try { // ***** REQUEST ***** if (!String.IsNullOrEmpty(context.Request[HttpBindingConstants.SAMLRequest])) { // Recupera LogoutRequest StringBuilder result = new StringBuilder(); byte[] encoded = Convert.FromBase64String(HttpUtility.UrlDecode(context.Request[HttpBindingConstants.SAMLRequest]).Replace(" ", "+")); MemoryStream memoryStream = new MemoryStream(encoded); using (DeflateStream stream = new DeflateStream(memoryStream, CompressionMode.Decompress)) { StreamReader reader = new StreamReader(new BufferedStream(stream), Encoding.GetEncoding("iso-8859-1")); reader.Peek(); result.Append(reader.ReadToEnd()); stream.Close(); } SAMLRequest = SAMLUtility.DeserializeFromXmlString <LogoutRequestType>(result.ToString()); AtribuirSessionSisIDLogout(((NameIDType)SAMLRequest.Item).Value); // Criação e configuração LogoutResponse SAMLResponse = new ResponseType(); CreateSAMLResponse(); } // ***** RESPONSE ***** else if (!String.IsNullOrEmpty(context.Request[HttpBindingConstants.SAMLResponse])) { throw new NotImplementedException(); } else { AtribuirSessionSisIDLogout(String.Concat(ApplicationWEB._DiretorioVirtual, "Logout.ashx")); __SessionWEB.SistemasRequestLogout++; //Se existir link de retorno na primeira vez, significa que o sistema que iniciou o processo de logout //enviou na queryString o endereço que deve ser redirecionado após terminar todo o processo. if (!String.IsNullOrEmpty(context.Request["SistemaUrlLogout"]) && __SessionWEB.SistemasRequestLogout == 1) { __SessionWEB.SistemaUrlLogout_QueryString = context.Request["SistemaUrlLogout"]; } // Verifica se existe sistemas autenticados em Cookie para realizar logout HttpCookie cookie = context.Request.Cookies["SistemasLogged"]; if (cookie != null && cookie.Values.AllKeys.Count(p => p != null) > 0) { SYS_Sistema entitySistema = SYS_SistemaBO.GetEntity(new SYS_Sistema { sis_id = Convert.ToInt32(cookie.Values.AllKeys.First()) }); HttpContext.Current.Response.Redirect(entitySistema.sis_caminhoLogout, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); } else { HttpCookie cookieBH = context.Request.Cookies["BH"]; if (cookieBH != null && !String.IsNullOrEmpty(IdentitySettingsConfig.IDSSettings.LogoutUrlAVA)) { HttpContext.Current.Response.Redirect(IdentitySettingsConfig.IDSSettings.LogoutUrlAVA, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); } else { RedirecionarParaLogoutIdentityServer(context); } } } } catch (ValidationException ex) { ApplicationWEB._GravaErro(ex); //ErrorMessage(ex.Message); RedirecionarParaLogoutIdentityServer(context); } catch (Exception ex) { ApplicationWEB._GravaErro(ex); //ErrorMessage("Não foi possível atender a solicitação."); RedirecionarParaLogoutIdentityServer(context); } }