Rediriger l'utilisateur vers une page authentifiée utilisant l'authentification par formulaire, à l'aide de l'en-tête d'emplacement HTTP, de HttpWebRequest / Response et de Response.Cookies.Add ()

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

Question

Je dois effectuer une authentification sur un site à l'aide de l'authentification par formulaires, puis rediriger l'utilisateur vers ce site avec le cookie de session. Je n'ai pas compris comment réussir cela. Voici mon code jusqu'à présent .. Je suis toujours redirigé vers la page de connexion de cette application. Toute aide est très appréciée!


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);
 }
}
Était-ce utile?

La solution

Utilisez Firebug sur Mozilla Firefox pour voir ce que fait exactement le navigateur lors de la connexion à la webapp. Simulez ensuite la même séquence par le code.

Vous pouvez également utiliser wirehark pour détecter les demandes envoyées par le navigateur.

Ce que je vois dans votre code, c’est que vous ajoutez explicitement le cookie. Vous ne devriez pas faire ça. Vous devez définir un CookieContainer sur la demande, afin que les cookies soient envoyés avec toutes les demandes adressées à ce site.

espérons que cela aide.

Autres conseils

Qu'est-ce qui ne va pas avec FormAuthentication classe? En particulier, avez-vous essayé la séquence suivante (ou une variante de celle-ci):

FormsAuthentication. Authentifier ();

FormsAuthentication. SetAuthCookie ();

FormsAuthentication. RedirectFromLoginPage ();

Je pense que vous devez envoyer une requête à une page authentifiée de l'application Web distante.

vous devrez récupérer le cookie qu'il vous donne pour que votre session soit valide. Un identifiant de session aspnet est transmis dans le cookie. Ensuite, vous devrez transmettre le nom d'utilisateur et le mot de passe requis pour cette application, ainsi que le cookie que vous avez reçu, afin de disposer d'une session authentifiée valide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top