Redireccionar usuario a página autenticada que usa autenticación de formularios, usando Encabezado de ubicación HTTP, HttpWebRequest / Response y Response.Cookies.Add ()

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

Pregunta

Necesito autenticarme en un sitio usando la autenticación de formularios y luego redirigir al usuario a ese sitio junto con la cookie de sesión. No he descubierto cómo hacer esto con éxito. Aquí está mi código hasta ahora ... Todavía me redirigen a esa página de inicio de sesión de aplicaciones. ¡Cualquier ayuda es muy 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);
 }
}
¿Fue útil?

Solución

Use Firebug en Mozilla Firefox para ver qué hace exactamente el navegador al iniciar sesión en la aplicación web. Luego simule la misma secuencia a través del código.

O bien, puede usar wireshark para detectar las solicitudes enviadas por el navegador.

Una cosa que puedo ver en su código es que está agregando la cookie explícitamente. No deberías estar haciendo esto. Debe configurar un CookieContainer en la solicitud, para que las cookies se envíen con todas las solicitudes a ese sitio.

espero que ayude.

Otros consejos

¿Qué tiene de malo usar FormsAuthentication clase? En particular, ¿ha probado la siguiente secuencia (o una variación de ella):

FormsAuthentication. Autenticar ();

Autenticación de formularios. SetAuthCookie ();

Autenticación de formularios. RedirectFromLoginPage ();

creo que debe hacer una solicitud a una página autenticada en la aplicación web remota.

tendrás que tomar la cookie que te da para tener una sesión válida. El ID de sesión de aspnet se pasa en la cookie. Luego, deberá pasar el nombre de usuario y la contraseña necesarios para esa aplicación junto con la cookie que recibió para que tenga una sesión autenticada válida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top