2011-08-25 18 views
7

Acabo de hacer una prueba rápida con una simple muestra de ASP.NET MVC 3 modificando el formulario de inicio de sesión predeterminado. De acuerdo con this article, tanto el campo oculto __RequestVerificationToken como las cookies __RequestVerificationToken_Lw__ deben contener el mismo valor que el generado por Html.AntiForgeryToken(). Pero no es exactamente lo mismo cuando los obtuve en Fiddle, por cierto, mirando el código fuente de MVC 3, el método GetAntiForgeryTokenAndSetCookie no pareció usar el valor de sal para generar las cookies. ¿Hubo algún cambio en MVC 3?¿Por qué el campo oculto de AntiForgeryToken no es igual que sus cookies en mi máquina?

Olvidé decir que aún puedo iniciar sesión correctamente con la solicitud POST normal o Ajax.

Aquí es iniciar sesión en bruto de violín:

POST http://localhost:51713/Account/LogOn HTTP/1.1 
Referer: http://localhost:51713/Account/LogOn 
Content-Length: 256 
Origin: http://localhost:51713 
X-Requested-With: XMLHttpRequest 
Content-Type: application/x-www-form-urlencoded 
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA= 

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false 
+1

Como nota al margen: los tokens AntiForgery están diseñados para ser utilizados en partes no públicas de su aplicación (donde el usuario ya está autenticado). Usarlos en un formulario de inicio de sesión público es bastante inútil. –

+0

El formulario de inicio de sesión se acaba de utilizar con fines de prueba. –

Respuesta

2

lo que hace pensar que deben ser los mismos? :) por supuesto, deben ser comparables de alguna manera, pero eso no significa que deben verse idénticos en su forma serializada. Hay un conjunto diferente de datos serializados para cookie (creo que solo el "salt" y token) y para el marcado HTML (sal, token, hora de creación, nombre de usuario).

Si usted está interesado en obtener más información, tomar ILSpy y buscar System.Web.Mvc.AntiForgeryDataSerializer, System.Web.Mvc.AntiForgeryData y OnAuthorization método de System.Web.Mvc.ValidateAntiForgeryTokenAttribute

+0

Gracias, el artículo mencionado dice que son iguales :), y su nombre es el mismo también. –

+0

No necesita ILSpy, ASP.NET Mvc es de código abierto. http://aspnetwebstack.codeplex.com/SourceControl/latest – haim770

1

El artículo se hace referencia a su pregunta es simplemente errónea, ya que el token de lucha contra la falsificación campo oculto no será nunca lo mismo que el valor de la cookie anti falsificación.

El valor agregado de mi respuesta es el link to interesting article que describe las partes internas del token anti-falsificación de ASP.NET. Es, entre otros, proporciona pasos claros para decodificar y descifrar la galleta/del formulario de token:

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue)) 

... y los pasos subsiguientes con el fin de que coincida con las fichas de galletas y forma.

Cuestiones relacionadas