Reindirizzare l'utente alla pagina autenticata che utilizza l'autenticazione basata su moduli, utilizzando HTTP Location Header, HttpWebRequest / Response e Response.Cookies.Add ()

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

Domanda

Devo autenticarmi su un sito usando l'autenticazione tramite moduli e quindi reindirizzare l'utente su quel sito insieme al cookie di sessione. Non ho capito come farlo con successo. Ecco il mio codice finora. Vengo ancora reindirizzato a quella pagina di accesso delle app. Qualsiasi aiuto è molto apprezzato!


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);
 }
}
È stato utile?

Soluzione

Usa Firebug su Mozilla Firefox per vedere cosa fa esattamente il browser quando accede alla webapp. Quindi simula la stessa sequenza tramite il codice.

In alternativa, puoi utilizzare WireShark per annusare le richieste inviate dal browser.

Una cosa che posso vedere dal tuo codice è che stai aggiungendo esplicitamente il cookie. Non dovresti farlo. È necessario impostare un CookieContainer sulla richiesta, in modo che i cookie vengano inviati con tutte le richieste a quel sito.

spero che sia d'aiuto.

Altri suggerimenti

Cosa c'è di sbagliato nell'uso dei FormsAuthentication classe? In particolare, hai provato la seguente sequenza (o una sua variante):

FormsAuthentication. Autentica ();

FormsAuthentication. SetAuthCookie ();

FormsAuthentication. RedirectFromLoginPage ();

credo che tu debba fare una richiesta a una pagina autenticata sull'app web remota.

dovrai prendere il cookie che ti dà in modo da avere una sessione valida. ID sessione aspnet passato nel cookie. Quindi dovrai passare il nome utente e la password richiesti per quell'app insieme al cookie che hai ricevuto in modo da avere una sessione autenticata valida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top