Sobre ViewState, MACValidation y MachineKey en asp .net

En ocasiones necesitamos que nuestras aplicaciones webs dispongan de una parte privada que sea accesible mediante la autenticación de un usuario.

Para ello ASP .Net nos ofrece multitud de componentes para implementar “zonas privadas” de forma rápida y sencilla.

Ya sea usando los Application Services o bien manualmente, el control de la sesión es algo necesario para que esto funcione correctamente.

La forma de implementarlo es sencilla (y no es el motivo de este post) el problema viene cuando intentamos realizar este tipo de validación en entornos compartidos (como es el caso de nuestro hosting en domitienda.com).

Pongamos un ejemplo:

Cuando realizas la validación de usuarios en entorno compartido (WebFarm o Cluster) se autogenera una machineKey como identificador para tu aplicación.

Una segunda aplicación web (alojada en el mismo servidor) realiza una validación de usuario con el mismo sistema y el pool por defecto le autogenera otra machineKey…¿que pasa cuando ambas machineKeys coinciden? Veriamos el siguiente error:

Validation of viewsate 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.

¿Os sis suena? Si es así no os preocupeis… tiene fácil solución.

Podeis usar cualquiera de estas soluciones:

  • Deshabilitar ViewState en el Web.Config:

Añade le siguiente código entre los tags <system.web>

<pages enableViewStateMac="false" />
  • Deshabilitar ViweState en la propia página:

Añade el siguiente código en la cabecera de la web aspx (entre los tags <% %>)

enableViewStateMac="False"
  • Indicar manualmente el MachineKey para tu aplicación:

En lugar de que el pool de asp .net nos genere un machineKey automaticamente podemos indicarle en el web.config que código queremos usar.

Para ello existe una herramienta web que nos generará un machineKey único para nosotros con un formato similar al siguiente:

<machineKey validationKey="2F9A2158572BBDC9DF12E8BB1E19BB12A6
69406F5F92A3A1972E0BE9ED886CE5D13A10696E5AEB52E46A905122D4889
E23109ECFDF231411AAB780A589CC0842" decryptionKey="26464B60C7F
B690349D918A6F02D0089A92C1F3AC3749881" validation="SHA1" />

Visita la siguiente web: http://aspnetresources.com/tools/keycreator.aspx y clickea sobre “Generate”.

Con esto solucionamos el problema del ViewState en entornos compartidos.

Y recuerda, si te surge algún otro problema estamos esperandote en el PhpLive de domitienda.com

5 comentarios

(Required)
(Required, will not be published)

Comment spam protected by SpamBam