Перенаправить пользователя на страницу, прошедшую проверку подлинности, которая использует проверку подлинности с помощью форм, используя HTTP Location Header, HttpWebRequest / Response и Response.Cookies.Add ()
-
07-07-2019 - |
Вопрос
Мне нужно выполнить аутентификацию на сайте с использованием проверки подлинности с помощью форм, а затем перенаправить пользователя на этот сайт вместе с файлом 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 на запрос, чтобы куки отправлялись вместе со всеми запросами на этот сайт.
надеюсь, что это поможет.
Другие советы
Что не так с использованием FormsAuthentication
класс? В частности, пробовали ли вы следующую последовательность (или ее вариант):