Uso de cookies o tokens con autenticación de formularios de dominio cruzado

Estoy tratando de implementar la autenticación usando jQuery y Forms Authentication en un servicio web ASP.NET MVC 3. La idea es que haré una publicación jQuery AJAX en el servicio web, que realizará la autenticación de formularios y devolverá una cookie o token, y con cada llamada de acceso a datos, mi aplicación web (jQuery) usará esa cookie o token.

Lo que tengo -

Tengo configurada la llamada AJAX al servicio web ASP.NET, y tengo el servicio web configurado de la siguiente manera:

public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl)
{

    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(userName, password))
        {
            return Json(FormsAuthentication.GetAuthCookie(userName, rememberMe), JsonRequestBehavior.AllowGet);

        }
        else
        {
            return Json("Authentication Failed", JsonRequestBehavior.AllowGet);
        }
    }
}

Esto funciona de modo que si realizo la llamada AJAX con las credenciales correctas, se me devuelve una cookie en JSON y, si no, se me devuelve la cadena de error de autenticación.

Lo que no se - Qué hacer con la cookie JSON una vez que la reciba. Puedo almacenar esto en el almacenamiento local HTML5, pero no sé qué parte (o todo) devolver con mis llamadas de acceso a datos, y cómo interpretarlo y verificar la cookie en el lado del servicio web. Si no debería usar cookies, ¿hay alguna forma de generar y usar un token de algún tipo?

preguntado el 02 de julio de 12 a las 16:07

1 Respuestas

Para cualquier otra persona que se encuentre, así es como lo resolví:

Me di cuenta de que no era necesario enviar la cookie a través de JSON. Mediante el uso FormsAuthentication.SetAuthCookie, se establece una cookie HTTP Only, que se envía automáticamente con llamadas AJAX. De esta forma, el servidor es el único responsable de la cookie Auth, pudiendo verificar la autenticación con Request.IsValidated.

Respondido 06 Jul 12, 18:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.