private void AddSAMLCookie() { if (!string.IsNullOrEmpty(SAMLRequest.AssertionConsumerServiceURL)) { HttpCookie cookie = Request.Cookies["SistemasLogged"]; if (cookie == null) { cookie = new HttpCookie("SistemasLogged"); Response.Cookies.Add(cookie); } // Carrega a Entidade SYS_Sistema apartir do caminho de login SYS_Sistema entitySistema = new SYS_Sistema { sis_caminho = SAMLRequest.AssertionConsumerServiceURL }; if (SYS_SistemaBO.GetSelectBy_sis_caminho(entitySistema, SYS_SistemaBO.TypePath.login)) { // Armazena sistema no Cookie cookie.Values[entitySistema.sis_id.ToString()] = entitySistema.sis_id.ToString(); // Atualiza dados do Cookie Response.Cookies.Set(cookie); } else { throw new ValidationException("Não foi possível atender a solicitação, sistema emissor da requisição não está cadastrado corretamente."); } } else { throw new ValidationException("Não foi possível atender a solicitação, requisição inválida."); } }
private void CreateSAMLResponse() { IDProvider config = IDProvider.GetConfig(); SAMLResponse.ID = SAMLUtility.GenerateID(); SAMLResponse.Version = SAMLUtility.VERSION; SAMLResponse.IssueInstant = DateTime.UtcNow.AddMinutes(10); SAMLResponse.InResponseTo = SAMLRequest.ID; SAMLResponse.Issuer = new NameIDType(); SAMLResponse.Issuer.Value = config.id; SAMLResponse.Status = new StatusType(); SAMLResponse.Status.StatusCode = new StatusCodeType(); // Atualiza Cookie de sistemas autenticados e configura Status HttpCookie cookie = this.Context.Request.Cookies["SistemasLogged"]; if (cookie != null) { // Carrega a Entidade SYS_Sistema apartir do caminho de logout SYS_Sistema entitySistema = new SYS_Sistema { sis_caminhoLogout = ((NameIDType)SAMLRequest.Item).Value }; if (SYS_SistemaBO.GetSelectBy_sis_caminho(entitySistema, SYS_SistemaBO.TypePath.logout)) { // Remove o sistema do Cookie cookie.Values.Remove(entitySistema.sis_id.ToString()); // Atualiza dados do Cookie this.Context.Response.Cookies.Set(cookie); if (!cookie.Values.AllKeys.Contains(entitySistema.sis_id.ToString())) { SAMLResponse.Status.StatusCode.Value = SAMLUtility.StatusCodes.Success; SAMLResponse.Status.StatusMessage = "A solicitação foi realizada com sucesso."; } else { SAMLResponse.Status.StatusCode.Value = SAMLUtility.StatusCodes.RequestDenied; SAMLResponse.Status.StatusMessage = "Não foi possível atender a solicitação, o sistema emissor da requisição não está autenticado."; } } else { SAMLResponse.Status.StatusCode.Value = SAMLUtility.StatusCodes.RequestDenied; SAMLResponse.Status.StatusMessage = "Não foi possível atender a solicitação, sistema emissor da requisição não está cadastrado corretamente.";; } } else { SAMLResponse.Status.StatusCode.Value = SAMLUtility.StatusCodes.RequestDenied; SAMLResponse.Status.StatusMessage = "Não foi possível atender a solicitação."; } HttpPostBinding binding = new HttpPostBinding(SAMLResponse, HttpUtility.UrlDecode(this.Context.Request[HttpBindingConstants.RelayState])); binding.SendResponse(this.Context, HttpUtility.UrlDecode(this.Context.Request[HttpBindingConstants.RelayState]), SAMLTypeSSO.logout); }
/// <summary> /// Atribui o sis_id que efetuou o logout à session, caso o login seja feito diretamente através da query string /// </summary> /// <param name="caminhoLogout">Caminho de logout do sistema que efetuou a solicitação</param> private void AtribuirSessionSisIDLogout(string caminhoLogout) { if (__SessionWEB.SistemaID_QueryString > 0 && __SessionWEB.SistemaIDLogout_QueryString <= 0) { SYS_Sistema sistemaLogout = new SYS_Sistema { sis_caminhoLogout = caminhoLogout }; SYS_SistemaBO.GetSelectBy_sis_caminho(sistemaLogout, SYS_SistemaBO.TypePath.logout); __SessionWEB.SistemaIDLogout_QueryString = sistemaLogout.sis_id; } }