lunes, 5 de mayo de 2014

Event message: Error de autenticación de formularios para la solicitud. Motivo: el vale suministrado no era válido. Event detail code: 50201 (invalid ticket)

 

Tengo una solución de autentificación por formularios completamente personalizada, es decir que no utiliza el objeto FormsAuthentication para generar los vales (ticket) y ni para recuperarlos ni para actualizarlos.

La solución se encarga de crear el Principal, la cookies y así como de la encriptación y la firma de las cookies.

El síntoma

Haciendo unas mejoras para la lectura de propiedades desde la configuración de repente me apareció este error terrible. Terrible porque porque no tenía ni pies ni cabeza, no había manera de diagnosticarlo por razonamiento, más que por algo parecido a un “ataque de diccionario”, paso a pasito…

Este error “Event detail code: 50201” tiene muchas entradas en la Web pero en mi caso la solución no tiene nada que ver con ellas o por lo menos con las que leí, ¡algunas del año 2007!

image

El problema

Event code: 4005 
Event message: Error de autenticación de formularios para la solicitud. Motivo: el vale suministrado no era válido. 
Event time: 22/04/2014 10:12:19 p. m. 
Event time (UTC): 23/04/2014 03:12:19 a. m. 
Event ID: f90558d63abd44fea22996ac07792f94 
Event sequence: 58 
Event occurrence: 9 
Event detail code: 50201 

La cookie se adjunta inicialmente a la petición del contexto HTTP pero, cuando se intenta reenviar una petición Web cualquiera o simplemente re direccionar a la página inicial después de autentificarse correctamente (en términos de usuario en DB)  pues resulta que la cookie ha desaparecido y ya no está adjunta al nuevo Request, por lo tanto, nunca se puede salir de la página del LogOn, porque la autentificación por Forms desparece.


 


Solución


En mi caso el código hace referencia a varias propiedades del objeto FormsAuthentication, con el objeto de aprovechar la lectura simple de la configuración definida en la sección correspondiente.


Pues todo va bien, excepto por una propiedad, que si usted la referencia “todo se va a bolina” y aparece el error mencionado:


NO SE PUEDE referenciar la propiedad FormsAuthentication.FormsCookieName, en su lugar debe utilizar una constante.


Según mis pruebas ni siquiera se puede leer directamente la sección de configuración correspondiente, la cargué como XML puro y la leí directamente por XPath y el error aparece, supongo debido a que especifiqué un nombre de cookie en la sección <forms name=”.xname” /> e igualmente se inicializa el módulo HTTP default para FormsAuthentication.


Es decir el sólo hecho de pretender tomar el nombre de la cookie desde dicha propiedad, activa un comportamiento predeterminado (no deseado en este caso) para comprobar la validez del ticket de la cookie mediante los algoritmos predeterminados que lógicamente dirán que “el vale suministrado no era válido”.


Entonces, NO haga referencias al nombre de la cookie ni la coloque en la sección “forms” de la configuración. Deje su nombre como una constante o póngala en la sección del “appSettings” si cree que no puede vivir con un nombre fijo.


Etiquetas de Technorati: ,,,,

No hay comentarios:

Publicar un comentario

Gracias de antemano por sus comentarios.