Перенаправить пользователя на страницу, прошедшую проверку подлинности, которая использует проверку подлинности с помощью форм, используя HTTP Location Header, HttpWebRequest / Response и Response.Cookies.Add ()

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

Вопрос

Мне нужно выполнить аутентификацию на сайте с использованием проверки подлинности с помощью форм, а затем перенаправить пользователя на этот сайт вместе с файлом cookie сеанса. Я не понял, как успешно это сделать. Вот мой код. Я все еще перенаправлен на страницу входа в эти приложения. Любая помощь очень ценится!


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);
 }
}
Это было полезно?

Решение

Используйте Firebug в Mozilla Firefox, чтобы увидеть, что именно делает браузер при входе в веб-приложение. Затем смоделируйте ту же последовательность с помощью кода.

Или вы можете использовать wireshark, чтобы прослушивать запросы, отправленные браузером.

Одна вещь, которую я вижу из вашего кода, это то, что вы явно добавляете cookie. Вы не должны делать это. Вы должны установить CookieContainer на запрос, чтобы куки отправлялись вместе со всеми запросами на этот сайт.

надеюсь, что это поможет.

scroll top