user redirecionamento para a página autenticados se a autenticação usa formulários, utilizando HTTP Location cabeçalho, HttpWebRequest / resposta e Response.Cookies.Add ()
-
07-07-2019 - |
Pergunta
Eu preciso autheticate em um site usando autenticação de formulários e, em seguida, redirecionar o usuário para o site, juntamente com o cookie de sessão. Eu ainda não descobri como fazer com sucesso este. Aqui está o meu código até agora .. eu ainda redirecionado para essa página aplicativos login. Qualquer ajuda é muito 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);
}
}
Solução
Use o Firebug no Mozilla Firefox para ver exatamente o que o navegador faz quando logar no webapp. Em seguida, simular a mesma seqüência através de código.
Ou, você pode usar o Wireshark para cheirar as solicitações enviadas pelo navegador.
Uma coisa eu posso ver do seu código, é que você está adicionando o cookie explicitamente. Você não deveria estar fazendo isso. Você deve definir um CookieContainer sobre o pedido, para que os biscoitos são enviados com todas as solicitações para esse site.
esperança que ajuda.
Outras dicas
errada do que com o uso do FormsAuthentication
class? Em particular, você já tentou a seguinte sequência (ou uma variação dele):
Eu acredito que você tem que fazer um pedido para uma página autenticado no aplicativo web remoto.
você vai ter que pegar o cookie que lhe dá então você tem uma sessão válida. aspnet id de sessão é passado no cookie. Então você vai precisar para passar o nome de usuário ea senha necessários para esse aplicativo junto com o cookie que você recebeu, assim você terá uma sessão autenticado válido.