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.");
        }
    }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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;
            }
        }