none
Autenticação (HttpWebRequest) em uma aplicação ASP.NET MVC RRS feed

  • Pergunta

  • Olá pessoal, 

    Tenho uma aplicação ASP.NET MVC 4 onde todas as controllers herdam da uma controle customizada, exemplo:

    MinhaController > ControllerCustomizada > Controller (Default).

    Na controller customizada, eu tenho uma verificação se o usuário está logado, exemplo:

    public void ValidarUsuario()
            {
                if (HttpContext.Session != null && HttpContext.Session["Usuario"] != null)
                    ViewBag.Usuario = Helper.Deserialize<Model.Usuario>(HttpContext.Session["Usuario"].ToString());
                else
                {
                    if (User.Identity.IsAuthenticated)
                    {
                        var usuario = new UsuarioApplication().SelecionarPorId(Convert.ToInt32(User.Identity.Name), true);
    
                        if (HttpContext.Session != null && usuario != null) {
                            HttpContext.Session.Add("Usuario", Helper.Serialize(usuario));
                            ViewBag.Usuario = usuario;
                        }
                        else{
                            Session.Clear();
                            FormsAuthentication.SignOut();
                            HttpContext.Response.Redirect(Url.Action("Login", "Account"));
                        }
                    }
                    else
                    {
                        Session.Clear();
                        FormsAuthentication.SignOut();
                        HttpContext.Response.Redirect(Url.Action("Login", "Account"));
                    }
                }
            }

    Ou seja, toda vez que um usuário acessa ou faz uma requisição, ele passa pela controller e verifica se está autenticada.

    Minha dúvida é a seguinte, eu tenho uma parte no código onde eu preciso fazer o request do código HTML de uma página (View), e gerar em PDF e enviar por e-mail. Toda regrinha eu já fiz e está funcionando em uma aplicação independente, porém quando eu realizo os testes no sistema, eu tenho o problema da autenticação, pois ele precisa se autenticar.

    Eu faço a requisição utilizando o (HttpWebRequest)

    terça-feira, 24 de setembro de 2013 18:57

Todas as Respostas

  • Boa tarde,

    Na sua ControllerCustomizada, quem chama esse método ValidarUsuario()?
    Para gerar o seu PDF, você chama uma Action em um Controller que deriva do seu ControllerCustomizada?
    Você poderia utilizar algo assim, dependendo do caso:

    Em RegisterGlobalFilters, incluir a linha filters.Add(new AuthorizeAttribute()); . Com isso, todas as suas Actions vão validar o usuário atual.

    Nas Actions onde você não precisa de validação de usuário, incluir o atributo: [AllowAnonymous] . Assim, a Action não vai validar o usuário.


    Att, Vitor Hugo Salgado

    quarta-feira, 25 de setembro de 2013 17:22
  • Olá 
    Vitor, obrigado pela ajuda e desculpe pela demora em responder.

    Na aplicação aqui da empresa, todas as controllers herdam de uma controller customizada, que possui um método que valida o usuário e verificação sessão.

    O meu objetivo é o seguinte:

    Preciso fazer a captura do HTML de uma página, porém essa página está em uma Action que deriva de uma controller que checa se está autenticado. Por mais que eu coloque para permitir acesso anônimos,  ele entra primeiro na controller e não válida.

    Eu tentei fazer o seguinte:

    Utilizar o HttpWebRequest e fazer um post na página de login passando meu login e senha.

    Depois fazer um HttpWebResponse fazendo um get na página para obter o HTML. 

    Porém ele me retorna sempre a página de login.

    O login ele está fazendo, mas parece que ele não está gravando alguma sessão ou cookies.

    =/

    Tentei utilizando o WebCliente, mas também caiu na página de login. 

    using (WebClient client = new WebClient())
                    {
                              string htmlCode = client.DownloadString("http://localhost:50811/page");
                    }

    sexta-feira, 27 de setembro de 2013 15:01