none
Problema Sesion. "No se pudo descifrar el token antifalsificación" ASP.NET MVC 5 RRS feed

  • Pregunta

  • Hola, 

    Estoy teniendo un error en la aplicación y no encuentro mucha información en Internet sobre eso, quisiera que me ayudaran por favor.

    Seguimiento de la pila: 

    [HttpAntiForgeryException (0x80004005): No se pudo descifrar el token antifalsificación. En caso de que esta aplicación esté alojada en una Web Farm o clúster, asegúrese de que todos los equipos ejecuten la misma versión de ASP.NET Web Pages y de que la configuración de <machineKey> especifique claves de validación y cifrado explícitas. AutoGenerate no puede utilizarse en un clúster.]
       System.Web.Helpers.AntiXsrf.AntiForgeryTokenSerializer.Deserialize(String serializedToken) +337
       System.Web.Helpers.AntiXsrf.AntiForgeryTokenStore.GetFormToken(HttpContextBase httpContext) +91
       System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext) +44
       System.Web.Helpers.AntiForgery.Validate() +92
       System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) +18
       System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +97
       System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState) +743
       System.Web.Mvc.Async.WrappedAsyncResult`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +14
       System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
       System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +343
       System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +25
       System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
       System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
       System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +465
       System.Web.Mvc.Controller.<BeginExecute>b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +18
       System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +20
       System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
       System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +374
       System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +16
       System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +52
       System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
       System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +384
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
       System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159

    La aplicación la estaba desarrollando en Visual Studio 2015 y lo pase a 2017, supongo que tendrá algo que ver, aunque en un principio me estuvo funcionando entonces descarte que la migración allá tenido algún error.

    La aplicación se hizo sobre una plantilla de MVC 5 con autenticación individual de usuarios. La app compila y se ejecuta normalmente, el problema ocurre cuando tengo un usuario logueado y luego le doy al botón cerrar sesión. 

    viernes, 11 de mayo de 2018 21:38

Respuestas

  • Hola MateoM9:

    Por el texto del error, parece más bien que tu iis no identifica el codigo de suplantación de identidad, como si fuera propio. O la configuración de tu webconfig no es perfecta.

    En el webconfig de tu proyecto, tienes que tener una cadena dentro de system.web llamada machine key

    que contiene descriptionkey y validationkey.

    Por lo que muestra tu mensaje de error, esa aplicacion, esta desplegada en un cluster, granja, o cualquier otro tipo de despliegue donde  existen varias máquinas con la misma.

    Luego en el IIS de cada una de las máquinas, (si es esa tu infraestructura), en la aplicación, tienes una Clave de equipo, dentro del grupo ASP.NET

    Esta clave, que no puede ser automatica, y tiene que ser la misma que el webconfig.

    Y en el Estado de la sesión, debes de tener marcado Usar Identidad de hospedaje para suplantación.

    Diría que tus tiros pueden ir por aquí

    Es  un tema complicado, y más sin saber como esta montada la misma, pero si te aporta puntos a mirar.

    Es posible que el cambio de maquina, haya hecho que tu webconfig y tu iis no tengan el mismo contenido, en cuanto a machinekey.

    Si tienes varias maquinas en una Granja ARR, sirviendo la misma aplicación, todas, deberían de tener el mismo machinekey

    Un saludo

    • Marcado como respuesta MateoM9 jueves, 17 de mayo de 2018 12:34
    sábado, 12 de mayo de 2018 12:25