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

Мне нужно выполнить аутентификацию на сайте с использованием аутентификации по формам, а затем перенаправить пользователя на этот сайт вместе с файлом 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);
 }
}

Ответы [ 3 ]

1 голос
/ 17 сентября 2009

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

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

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

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

1 голос
/ 17 сентября 2009

Что не так с использованием класса FormsAuthentication? В частности, вы пробовали следующую последовательность (или ее вариант):

FormsAuthentication.Authenticate();

FormsAuthentication.SetAuthCookie();

FormsAuthentication.RedirectFromLoginPage();

0 голосов
/ 03 декабря 2009

Я считаю, что вы должны сделать запрос на аутентифицированную страницу в удаленном веб-приложении.

вам нужно взять cookie, который он вам дает, чтобы у вас был действительный сеанс. Идентификатор сеанса aspnet передается в cookie. Затем вам нужно будет передать имя пользователя и пароль, необходимые для этого приложения, вместе с полученным файлом cookie, чтобы у вас был действительный сеанс аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...