vista valido validación validacion net mac estado error aspnet asp asp.net viewstate machinekey

valido - La validación de Asp.net de viewstate MAC falló



estado de vista no valido asp net (12)

En un entorno de varios servidores, es probable que este error se produzca cuando la sesión caduque y otra instancia de una aplicación se vuelva a ordenar con el mismo identificador de sesión y clave de máquina, pero en un servidor diferente. Al principio, cada servidor produce su propia clave de máquina que luego se asocia con una sola instancia de una aplicación. Cuando la sesión expira y el servidor actual está ocupado, la aplicación se redirige, a través de un equilibrador de carga a un servidor más operativo. En mi caso, ejecuto la misma aplicación desde varios servidores, el mensaje de error:

La validación de viewstate MAC falló. Si esta aplicación está alojada en una granja de servidores web o un clúster, asegúrese de que la configuración especifique el mismo algoritmo de validación y clave de validación

Definir el código de máquina en web.config ha resuelto el problema. Pero en lugar de usar sitios de terceros para la generación de código que podría estar dañado, ejecute esto desde su shell de comandos: Basado en la solución 1a de microsoft, https://support.microsoft.com/en-us/kb/2915218#AppendixA

# Generates a <machineKey> element that can be copied + pasted into a Web.config file. function Generate-MachineKey { [CmdletBinding()] param ( [ValidateSet("AES", "DES", "3DES")] [string]$decryptionAlgorithm = ''AES'', [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")] [string]$validationAlgorithm = ''HMACSHA256'' ) process { function BinaryToHex { [CmdLetBinding()] param($bytes) process { $builder = new-object System.Text.StringBuilder foreach ($b in $bytes) { $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b) } $builder } } switch ($decryptionAlgorithm) { "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider } "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider } "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider } } $decryptionObject.GenerateKey() $decryptionKey = BinaryToHex($decryptionObject.Key) $decryptionObject.Dispose() switch ($validationAlgorithm) { "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 } "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 } "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 } "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 } "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 } } $validationKey = BinaryToHex($validationObject.Key) $validationObject.Dispose() [string]::Format([System.Globalization.CultureInfo]::InvariantCulture, "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />", $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey, $validationAlgorithm.ToUpperInvariant(), $validationKey) } }

Entonces:

Para ASP.NET 4.0

Generate-MachineKey

Su clave se verá así: <machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />

Para ASP.NET 2.0 y 3.5

Generate-MachineKey -validation sha1

Su clave se verá así: <machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />

Recibo el siguiente error en ciertos momentos en el sitio web asp.net.

Sys.WebForms.PageRequestManagerServerErrorException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Cuando se actualiza la página, no hay problema. ¿Cómo puedo resolver este problema?


Esta solución me funcionó en ASP.NET 4.5 utilizando un sitio de Web Forms.

  1. Utilice el siguiente sitio para generar una clave de máquina: http://www.blackbeltcoder.com/Resources/MachineKey.aspx
  2. Copiar código de clave de máquina completa.
  3. Ir a su archivo Web.Config.
  4. Pega la llave de la máquina en la siguiente sección de código:

    <configuration >

    <system.web >

    <machineKey ... />

    </system.web >

    </configuration >

Ya no debería ver el error Viewstate Mac. Cada sitio web en el mismo grupo de aplicaciones debe tener una clave de máquina separada, de lo contrario este error continuará.


Este mensaje de error normalmente se muestra después de haber publicado su sitio web en el servidor.

El principal problema radica en el grupo de aplicaciones que utiliza para su sitio web.

Configure su sitio web para usar la versión adecuada de .NET Framework (es decir, v4.0) en la sección General del grupo de aplicaciones relacionado con su sitio web.

En el Modelo de proceso, establezca el valor de Identidad en Servicio de red.

Cierre el cuadro de diálogo y haga clic con el botón derecho en su sitio web y seleccione Configuración avanzada ... en la opción Administrar sitio web del menú de contenido. En el cuadro de diálogo, en la sección General, asegúrese de haber seleccionado el nombre correcto del grupo de aplicaciones que se utilizará.

Su sitio web ahora debería funcionar sin ningún problema.

Espero que esto te ayude a superar este error.


Hay otro escenario que estaba sucediendo para mis clientes. Esto ocurría normalmente en cierto tiempo debido a los cambios de turno y los usuarios necesitaban iniciar sesión con un usuario diferente. Aquí hay un escenario en el que el sistema Anti-falsificación protege el sistema al generar este error:

1- Una vez cierre / abra su navegador. 2- Vaya a su sitio web e inicie sesión con "Usuario A" 3- Abra una nueva pestaña en el navegador e ingrese el mismo sitio de direcciones. (Puede ver la página de inicio de su sitio sin ninguna autenticación) 4- Cierre la sesión de su sitio e inicie sesión con otro usuario (Usuario B) en la segunda pestaña. 5- Ahora vuelva a la primera pestaña en la que inició sesión con "Usuario A". Aún puede ver la página, pero cualquier acción en esta pestaña hará el error. Debido a que su cookie ya está actualizada por el "Usuario B" y está intentando enviar una solicitud de un usuario no válido. (Usuario A)


La validación de viewstate MAC falló. Si esta aplicación está alojada en una granja de servidores web o en un clúster, asegúrese de que la configuración de <machineKey> especifique la misma validationKey y el algoritmo de validación. AutoGenerate no se puede utilizar en un clúster.

Responder :

<machineKey decryptionKey="2CC8E5C3B1812451A707FBAAAEAC9052E05AE1B858993660" validation="HMACSHA256" decryption="AES" validationKey="CB8860CE588A62A2CF9B0B2F48D2C8C31A6A40F0517268CEBCA431A3177B08FC53D818B82DEDCF015A71A0C4B817EA8FDCA2B3BDD091D89F2EDDFB3C06C0CB32" />


Lo que funciono para mi

  1. Busque en la web "MachineKey generator"

  2. Vaya a uno de los sitios encontrados y genere la Clave de la Máquina, que se verá como ... (los números son más grandes)
    ... MachineKey
    validationKey = "0EF6C03C11FC ... 63EAE6A00F0B6B35DD4B" decryptionKey = "2F5E2FD80991C629 ... 3ACA674CD3B5F068" validation = "SHA1" decryption = "AES" />

  3. Copie y pegue en la sección <system.web> en el archivo web.config.

Si quieres seguir el camino que hice ...

https://support.microsoft.com/en-us/kb/2915218#AppendixA
Resolución de errores de código de autenticación de mensaje de estado de vista (MAC) Resolución 3b: Utilice una <machineKey> explícita
Al agregar un elemento <machineKey> explícito al archivo Web.config de la aplicación, el desarrollador le dice a ASP.NET que no use la clave criptográfica generada automáticamente. Consulte el Apéndice A para obtener instrucciones sobre cómo generar un elemento <machineKey> .

http://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx
La forma más fácil de generar MachineKey - Ahmet Mithat Bostanci - 31 Jul 2012 Puede buscar en Bing el "Generador MachineKey" y usar un servicio en línea. Honestamente...

http://www.blackbeltcoder.com/Resources/MachineKey.aspx


Mi problema fue esta pieza de código javascript

$(''input'').each(function(ele, indx){ this.value = this.value.toUpperCase(); });

Convierte que estaba jugando con el campo oculto de ViewState, así que lo cambié al siguiente código y funcionó.

$(''input:visible'').each(function(ele, indx){ this.value = this.value.toUpperCase(); });


Microsoft dice que nunca use el sitio web generador de claves .

Como todos los demás aquí, agregué esto a mi web.config.

<System.Web> <machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242" validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA" validation="SHA1" /> </system.web>

Sin embargo, usé IIS como mi generador machineKey así:

  1. Abre IIS y selecciona un sitio web para obtener esta pantalla:

  1. Haga doble clic en el icono de Clave de la máquina para obtener esta pantalla:

  1. Haga clic en el enlace "Generar claves" a la derecha que describí en la imagen de arriba.

Notas:

  • Si selecciona la casilla de verificación "Generar una clave única para cada aplicación", se agregará IsolateApps al final de sus claves. Tuve que quitarlos para que la aplicación funcionara. Obviamente, no son parte de la clave.
  • SHA1 fue el método de cifrado predeterminado seleccionado por IIS y si lo cambia, no olvide cambiar la propiedad de validación en machineKey en web.config. Sin embargo, los métodos de cifrado y los algoritmos evolucionan, así que no dude en editar esta publicación con el método de cifrado preferido actualizado o mencionarlo en las notas y lo actualizaré.

No estoy seguro de cómo sucedió esto, pero comencé a recibir este error en las páginas de mi formulario de envío interno. Así que cuando alguna vez presente algo, estoy recibiendo este error. Pero el problema es que este sitio web está casi trabajando 5-6 años. No recuerdo haber hecho un cambio importante.

Ninguna de las soluciones funcionó para mí.

He configurado una clave de máquina con el script de Microsoft y la he copiado en mi web.config

He ejecutado el script regiis de asp.net.

aspnet_regiis -ga "IIS APPPOOL/My App Pool"

También intenté agregar este código en la página:

enableViewStateMac="false"

todavia no hay suerte

¿Alguna otra idea para resolver este problema?

ACTUALIZAR:

Finalmente resolví el problema. Había integrado mi componente angular 4 en mi sitio web asp.net. Así que había añadido base href en mi página maestra. Así que quité ese código y ahora está funcionando bien.

<base href="/" />


Si está utilizando una granja de servidores web y ejecuta la misma aplicación en varios equipos, debe definir la clave de la máquina explícitamente en el archivo machine.config:

<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decryptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" />

Ponlo bajo la etiqueta <system.web> .

No se puede utilizar la generación automática para el código de máquina. Para generar su propia MachineKey vea este script de powershell: https://support.microsoft.com/en-us/kb/2915218#bookmark-appendixa


Tuve este mismo problema y se debió a una vista de cuadrícula (generada a partir de un código vb) en la página que tenía habilitada la clasificación. Desactivar la clasificación solucionó mi problema. No tengo este problema con las vistas de cuadrícula creadas usando una fuente de datos SQL.


Tuve este problema, y ​​para mí la respuesta fue diferente a las otras respuestas a esta pregunta.

Tengo una aplicación con muchos clientes. global.asax todos los errores en el application_error en global.asax y me envío un correo electrónico con el detalle del error. Después de que publiqué una nueva versión de mis aplicaciones, comencé a recibir una gran cantidad de mensajes de error de validación de Viewstate MAC.

Después de un día de búsqueda, me di cuenta de que tengo un temporizador en mis aplicaciones, que actualiza un panel de actualización cada minuto. Entonces, cuando publiqué una nueva versión de mis aplicaciones y algunos clientes dejaron su computadora abierta en mi sitio web. Recibo un mensaje de error cada vez que se actualiza el temporizador porque el estado actual de visualización no coincide con el nuevo. Recibí este mensaje hasta que todos los clientes cerraron el sitio web o actualizaron su navegador para obtener la nueva versión.

Lo siento por mi inglés, y sé que mi caso es muy específico, pero si puede ayudar a alguien a ahorrar un día, creo que es algo bueno.