HttpWebRequest login ekstern website
Forum --> ASP.NET
|
Author |
Comment |
Kai Tangen Lunheim
|
HttpWebRequest login ekstern website |
07.02.2011 11:22:52
|
|
Håper noen kan hjelpe, har kjørt meg skikkelig fast og føler jeg har lest alt Google har servert om temaet. Saken er den at jeg skal utvide eksisterende pålogging på firmaets side til å håndtere pålogging til to sider. Brukerne blir flagget i databasen med ekstern/intern, hvis intern bruker fyres vanlig pålogginsmekanisme, hvis ekstern bruker skal pålogging skje på LOGIN_URL vist i koden under. Har forøkt meg med en løsning ved bruk av HttpWebRequest og har fått påloggingen til å fungere med koden under. Men det som er saken er at jeg ønsker å vise den autoriserte side i nettleseren etter at denne koden er eksekvert(Det jeg får tilbake i stringen buffer i slutten der er html fra den autoriserte siden). Hvis jeg redirecter til url'en funnet i location headeren så vises påloggingssiden selvom jeg har satt opp CookieContaineren til å "spare" på cookies på tvers av requests. Den har altså ikke noe kjenskap til at jeg har gjort en suksessfull pålogging. Dette er vel et session problem? Hva er det jeg ikke har fått med meg?
string LOGIN_URL = "https://infocenter.conecto.no/kundeweb/Default.aspx";
//cookie container for our session CookieContainer cookies = new CookieContainer();
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(LOGIN_URL); webRequest.CookieContainer = cookies;
//recieve non-authenticated cookie webRequest.GetResponse().Close();
//encode POST variables string postData = string.Format("dnn$ctr346$Login$uxtUserName={0}&dnn$ctr346$Login$uxtPassword={1}&__EVENTTARGET=dnn$ctr346$Login$uxbLogin", username, password); byte[] send = Encoding.UTF8.GetBytes(postData);
//prepare our HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(LOGIN_URL); webRequest.Method = "POST"; webRequest.KeepAlive = false; webRequest.AllowAutoRedirect = false; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = send.Length; webRequest.CookieContainer = cookies;
// Write encoded post variable to the stream Stream stream = webRequest.GetRequestStream(); stream.Write(send, 0, send.Length); stream.Flush(); stream.Close();
// Retrieve HttpWebResponse HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.Found) { string redirecturl = webResponse.Headers["Location"];
// Link the response cookie to the domain cookies.Add(webResponse.Cookies);
// Prepare our navigate HttpWebRequest, and set its cookie. webRequest = (HttpWebRequest)WebRequest.Create(redirecturl); webRequest.KeepAlive = false; webRequest.Method = "GET"; webRequest.AllowAutoRedirect = true; webRequest.CookieContainer = cookies;
// Retrieve HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
// Retrieve stream response and read it to end Stream st = webResponse.GetResponseStream(); StreamReader sr = new StreamReader(st); string buffer = sr.ReadToEnd(); }
|
Steve Celius
|
RE:HttpWebRequest login ekstern website |
07.02.2011 16:24:19
|
|
Hei,
autentiseringen skjer såvide jeg kan se fra server til server, og cookie containeren tilhører serverkoden din. Den cookien vil ikke flyte tilbake til klienten sånn uten videre. Er dette to forskjellige domener? Da er det en rimelig standard SSO utfordring, og må håndteres på en annen måte.
/Steve |
Kai Tangen Lunheim
|
RE:HttpWebRequest login ekstern website |
08.02.2011 13:53:55
|
Takk for svar Steve. På grunn av tidspress ble jeg nødt til å løse dette med Response.Write(<form ...); og clientside javascript. Men jeg er av den oppfatning av dette er en litt bob bob måte å gjøre det på, og vil undersøke nevnte problemstilling næremere hvis tiden strekker til.
Kai |
Copyright (C) 2006 Norwegian .NET User Group