Escribir cookies de CookieContainer en la tienda de cookies de IE

Quiero navegar a una página en una aplicación web desde una aplicación de escritorio. "No hay problema", le oigo decir, "simplemente inicie el navegador predeterminado con la URL correcta". Sin embargo, la aplicación web usa la autenticación de formularios ASP.NET, y los usuarios no quieren ver la página de inicio de sesión porque ya se han autenticado con las mismas credenciales en la aplicación de escritorio.

Eso suena bastante simple, todo lo que tengo que hacer es emitir un HTTP POST desde la aplicación de escritorio que simula la devolución de datos desde la página de inicio de sesión de la aplicación web. La aplicación web configurará su ticket de autenticación y las cookies de estado de sesión, me las devolverá y las guardaré en la tienda de cookies de IE. Luego puedo navegar a la página deseada y la aplicación web pensará que ya está autenticada.

Tengo un código de trabajo que construye el HTTP POST, lo envía y obtiene una respuesta válida que contiene las cookies correctas. Sin embargo, no puedo ver cómo escribirlos en la tienda de cookies de IE. ¿Alguien puede señalarme en la dirección correcta?

Código de muestra:

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,
});

Respuestas a la pregunta(1)

Su respuesta a la pregunta