2009-11-02 8 views
7

que estoy usando ELMAH para controlar los errores en mis sitios MVC y me he dado cuenta en el último par de semanas que estoy recibiendo algunos CryptographicExceptions lanzados. El mensaje es:ASP.MVC antiforgery errores de tokens criptográficos y

System.Security.Cryptography.CryptographicException: el relleno no es válido y no se puede eliminar.

System.Web.Mvc.HttpAntiForgeryException: A requerido contador anti-falsificación no se suministra o no es válida. ---> System.Web.HttpException: la validación de viewstate MAC falló. Si esta aplicación está alojada en un clúster Web Farm o , asegúrese de que la configuración especifique el mismo algoritmo validationKey y validación . AutoGenerate no se puede usar en un clúster. --->

La aplicación no se está ejecutando en un clúster y parece que no puedo reproducir estos errores. Parecen solicitudes válidas, no una publicación hecha a mano, y contienen la cookie __RequestVerificationToken. Tengo el ayudante de HTML requerido en la página, dentro del formulario (mi formulario de inicio de sesión).

no he tenido ninguna queja de los usuarios, sin embargo, así que estoy asumiendo que con el tiempo funciona para quien está tratando de iniciar sesión, pero me quedo preguntando por qué esto podría estar sucediendo.

que alguien más vea este comportamiento o tiene alguna idea sobre cómo diagnosticar la excepción - como he dicho, no puedo conseguir que falle. Eliminar la cookie en FF genera un error diferente. Modificar la cookie (cambiar o eliminar el contenido) también genera un error diferente, al igual que la modificación del contenido de la entrada del token oculto en la página.

Respuesta

4

no estoy seguro de si existe una correlación, pero después de la adición de un archivo robots.txt que excluye mis acciones de inicio de sesión, ya no estoy viendo estos errores. Sospecho que tiene que ver con un rastreador que golpea la página y trata de invocar la acción de inicio de sesión.

EDIT: También he visto este problema cuando recibo cookies antiguas después de que se haya reciclado el grupo de aplicaciones. He recurrido a configurar MachineKey explícitamente para que los cambios en las claves de validación/descifrado en los reinicios de la aplicación no afecten a las cookies antiguas que pueden reenviarse.

Después de actualizar el sitio e ir a un machineKey fijo Me di cuenta de que todavía estaba recibiendo estos errores de las personas que tenían las galletas de la versión anterior. Como un trabajo temporal en torno He añadido el siguiente controlador Application_Error:

public void Application_Error() 
    { 
     var exception = Server.GetLastError().GetBaseException(); 
     if (exception is System.Security.Cryptography.CryptographicException) 
     { 
      Server.ClearError(); 
      if (Request.IsAuthenticated) 
      { 
       var form = new FormsAuthenticationWrapper(); 
       form.SignOut(); 
       Session.Clear(); 
      } 
      Response.Cookies.Clear(); 
      Response.Redirect("~"); 
     } 
    } 
+0

machineKey era la solución correcta. –

+0

Experiencia similar: mi blog comenzó a fallar intermitentemente después de migrarlo a ASP.NET MVC 2.Se agregó machineKey y el problema desapareció. –

1

No estoy tan seguro de que esto tiene algo que ver específicamente con el sistema antiforgery, a excepción estados interiores 'Validación del estado de vista MAC fallado.', Por lo que puedo decir, la infraestructura predeterminado para el sistema antiforgery tiene una dependencia en viewstate (de hecho, si take a look here verá la dependencia y el horror (el método CreateFormatterGenerator en la parte inferior)).

En cuanto a por qué el mac viewstate falla en la solicitud falsa, no estoy seguro, pero dado el horror que existe al deserializar el token antiforgery (procesando una solicitud falsa completa), no me sorprende en absoluto ..

Cuestiones relacionadas