user redirecionamento para a página autenticados se a autenticação usa formulários, utilizando HTTP Location cabeçalho, HttpWebRequest / resposta e Response.Cookies.Add ()

StackOverflow https://stackoverflow.com/questions/1436252

Pergunta

Eu preciso autheticate em um site usando autenticação de formulários e, em seguida, redirecionar o usuário para o site, juntamente com o cookie de sessão. Eu ainda não descobri como fazer com sucesso este. Aqui está o meu código até agora .. eu ainda redirecionado para essa página aplicativos login. Qualquer ajuda é muito apreciada!


protected void Button1_Click(object sender, EventArgs e)
{
 string data = "nickname=&login={0}&password={1}&action_login.x=70&action_login.y=14action_login=Login";
 string postdata = String.Format(data, "test", "test");
 string page = @"http://1.1.1.1/home.asp";
 string loginPage = @"http://1.1.1.1/auth.asp";
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginPage);
 request.Method = "POST";
 request.ContentType = "application/x-www-form-urlencoded";
 request.AllowAutoRedirect = false;
 ASCIIEncoding encoding = new ASCIIEncoding(); //encoder
 byte[] requestData = encoding.GetBytes(postdata); //encode post data
 request.ContentLength = requestData.Length;
 //write the post data to the request
 Stream requestStream = request.GetRequestStream();
 // Send the data.
 requestStream.Write(requestData, 0, requestData.Length);
 requestStream.Close();
 try
 {
  HttpWebResponse response = (HttpWebResponse) request.GetResponse();
  string cookieHeader = response.GetResponseHeader("Set-Cookie");
  string cookieValue = cookieHeader.Replace("pp_session_id=", "");
  HttpCookie cookie = new HttpCookie("pp_session_id",cookieValue);
  cookie.Domain = "1.1.1.1";
  cookie.Path = "/";
  Response.Clear();
  Response.StatusCode = 302;
  //Response.AddHeader("Set-Cookie", cookieHeader);
  Response.AddHeader("Location",page);
  Response.RedirectLocation = page;
  Response.Cookies.Add(cookie);
  Response.Flush();

 }
 catch (WebException ex)
 {
  Response.Write(ex.Message);
 }
}
Foi útil?

Solução

Use o Firebug no Mozilla Firefox para ver exatamente o que o navegador faz quando logar no webapp. Em seguida, simular a mesma seqüência através de código.

Ou, você pode usar o Wireshark para cheirar as solicitações enviadas pelo navegador.

Uma coisa eu posso ver do seu código, é que você está adicionando o cookie explicitamente. Você não deveria estar fazendo isso. Você deve definir um CookieContainer sobre o pedido, para que os biscoitos são enviados com todas as solicitações para esse site.

esperança que ajuda.

Outras dicas

Eu acredito que você tem que fazer um pedido para uma página autenticado no aplicativo web remoto.

você vai ter que pegar o cookie que lhe dá então você tem uma sessão válida. aspnet id de sessão é passado no cookie. Então você vai precisar para passar o nome de usuário ea senha necessários para esse aplicativo junto com o cookie que você recebeu, assim você terá uma sessão autenticado válido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top