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 ()
-
07-07-2019 - |
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);
}
}
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.