Question

Je veux accéder à une page dans une application Web à partir d'une application de bureau. « Pas de problème », je vous entends dire, « juste lancer le navigateur par défaut avec l'URL correcte ». Cependant, l'application Web ASP.NET utilise l'authentification par formulaire, et les utilisateurs ne veulent pas voir la page de connexion, car ils ont déjà authentifié avec les mêmes informations d'identification dans l'application de bureau.

Cela semble assez simple, tout ce que je dois émettons est un HTTP POST de l'application de bureau avec ce faux le postback de la page de connexion de l'application Web. L'application Web établira alors son ticket d'authentification et les cookies d'état de session, les retourner à moi, et je vais les stocker dans le magasin de cookies IE. Je peux alors naviguer à la page désirée et l'application Web penserai qu'il est déjà authentifié.

J'ai un code de travail qui construit le HTTP POST, envoie-la et obtient une réponse valide contenant les biscuits droit. Cependant, je ne vois pas comment les écrire dans le magasin de cookies IE. point que quelqu'un peut me dans la bonne direction?

Exemple de code:

var requestUrl = Properties.Settings.Default.WebsiteLoginPageUrl;

var requestEncoding = Encoding.GetEncoding(1252);

// Simulated login postdata
var requestText = string.Format(
    "__VIEWSTATE={2}&__EVENTTARGET={3}&__EVENTARGUMENT={4}&__EVENTVALIDATION={5}&userNameText={0}&passwordText={1}&submitButton=Log+In",
    HttpUtility.UrlEncode(Properties.Settings.Default.UserName),
    HttpUtility.UrlEncode(Properties.Settings.Default.Password),
    Properties.Settings.Default.FakeViewState,
    Properties.Settings.Default.FakeEventTarget,
    Properties.Settings.Default.FakeEventArgument,
    Properties.Settings.Default.FakeEventValidation);

var request = (HttpWebRequest) WebRequest.Create(requestUrl);
request.Method = "POST";
request.Accept = "*/*";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = requestEncoding.GetByteCount(requestText);
request.Headers.Add(HttpRequestHeader.CacheControl, "no-cache");
request.AllowAutoRedirect = false;
request.KeepAlive = false;
request.CookieContainer = new CookieContainer();

using(var writer = new StreamWriter(request.GetRequestStream(), requestEncoding)) {
    writer.Write(requestText);
}

var response = (HttpWebResponse) request.GetResponse();

// TODO: Grab the response cookies and save them to the interactive desktop user's cookie store.

Process.Start(new ProcessStartInfo {
    FileName = Properties.Settings.Default.WebsiteTargetPageUrl,
    UseShellExecute = true,
});
Était-ce utile?

La solution

Vous devez appeler le non géré InternetSetCookie ( ) fonction . Et regarde! Quelqu'un a écrit Interop pour vous déjà. Vous devez vérifier l'exactitude si.

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