5

Estoy usando el nuevo webapi.Intentando descifrar un ticket de FormsAuthentication siempre que no puede validar los datos

Ahora no sé si estoy haciendo esto correctamente, pero estoy tratando de configurar mi API para que devuelva una cookie de autenticación dentro del encabezado HttpResponseMessages para usar en otra aplicación de mvc.

estoy usando el FormsAuthenticationTicket como creo que es lo que necesito para usar como

public HttpResponseMessage Get(LoginModel model) 
    { 
     if (model.UserName == "bob") 
     { 
      // if (Membership.ValidateUser(model.UserName, model.Password)) 
      // { 
      var msg = new HttpResponseMessage(HttpStatusCode.OK); 
      var expires = DateTime.Now.AddMinutes(30); 
      var auth = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now, expires, 
                model.RememberMe,"password", 
                FormsAuthentication.FormsCookiePath); 
      var cookie = new HttpCookie("user"); 
      cookie.Value = FormsAuthentication.Encrypt(auth); 
      cookie.Domain = "localhost"; 
      cookie.Expires = expires; 
      msg.Headers.Add("result",cookie.Value); 
      return msg; 
      // } 
     } 
     return new HttpResponseMessage(HttpStatusCode.Forbidden); 
     //else 
     //{ 
     // return "The user name or password provided is incorrect."; 
     //} 
    } 

ahora dentro de mi controlador de inicio de sesión en mi aplicación MVC que llamo el servicio y obtener el valor de los datos de la cabecera puse en el controlador api

string data = response.Headers["result"].ToString(); 
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(data); 

Cada vez que intento ejecutar el FormsAuthentication.Decrypt Me aparece un error

No se puede validar los datos.

Supongo que es debido a que cuando la API encripta los datos, utiliza algún tipo de clave que el sitio web desconoce. ¿Estoy en lo cierto?

¿Alguien puede ayudar?

Gracias

+0

¿Cuál es el valor de 'data' en esta línea' string data = response.Headers ["result"]. ToString(); '? – Aliostad

Respuesta

8

que asuma su debido a que el API encripta los datos que utiliza algún tipo de clave que el sitio web no sabe nada. ¿Estoy en lo cierto?

FormsAuthentication.Encrypt y métodos de descifrado utilizan el machine key. Así que asegúrese de haber configurado la misma clave para su aplicación web API web y la aplicación consumidora ASP.NET MVC.

También puede consultar el following article que ilustra cómo podría usar OAuth 2.0 con la API web.

+0

¿Alguna idea de cómo lanzar un error de manera que pueda borrar mis cookies y redirigir al usuario a un controlador de la excepción? Mis cookies persisten, por lo tanto, me quedo atrapado en un bucle de redirección. Esto ocurre cuando actualizo mis llaves. La API web devuelve 401 pero MVC lo redirige a la página de inicio de sesión, y la solicitud de la página de inicio de sesión vuelve a enviar la cookie que arroja la respuesta no autorizada. ¡Atrapado en un círculo vicioso! – Shouvik

Cuestiones relacionadas