Ich habe Probleme mit dem AntiForgeryToken in ASP.Net MVC. Wenn ich ein iisreset auf meinem Webserver mache und ein Benutzer mit seiner Sitzung fortfährt, werden sie auf eine Anmeldeseite weitergeleitet. Nicht schrecklich, aber dann explodiert der AntiForgen-Token und der einzige Weg, um wieder loszulegen, ist das Cookie im Browser wegzublasen.Wie löse ich eine AntiForgeryToken-Ausnahme, die nach einem iisreset in meiner ASP.Net MVC-App auftritt?
Mit der Beta-Version von Version 1 ging es falsch beim Lesen des Cookies zurück für mich, also habe ich es vor der Frage nach einem Validierungstoken schrubben, aber das wurde behoben, als es veröffentlicht wurde.
Für jetzt denke ich werde ich zurück zu meinem Code, der das Beta-Problem behoben, aber ich kann nicht helfen, aber denke, dass ich etwas vermisse. Gibt es eine einfachere Lösung, sollte ich einfach ihren Helfer fallen lassen und einen neuen von Grund auf neu erstellen? Ich habe das Gefühl, dass ein Großteil des Problems darin besteht, dass es so tief in die alte ASP.Net-Pipeline eingebunden ist und versucht, es zu etwas zu machen, für das es eigentlich nicht vorgesehen war.
Ich hatte einen Blick in den Quellcode für die ASP.Net MVC 2 RC und es sieht nicht aus wie der Code hat sich viel geändert, so, während ich es nicht versucht habe, glaube ich nicht, dass es irgendwelche Antworten gibt Dort.
Hier ist der relevante Teil des Stack-Trace der Ausnahme.
Edit: Ich habe gerade festgestellt, ich habe nicht erwähnt, dass dies nur versucht, das Token auf die GET-Anfrage einzufügen. Dies ist nicht die Validierung, die auftritt, wenn Sie einen POST-Kick-off ausführen.
System.Web.Mvc.HttpAntiForgeryException: A required anti-forgery token was not
supplied or was invalid.
---> System.Web.HttpException: 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.
---> System.Web.UI.ViewStateException: Invalid viewstate.
Client IP: 127.0.0.1
Port: 4991
User-Agent: scrubbed
ViewState: scrubbed
Referer: blah
Path: /oursite/Account/Login
---> System.Security.Cryptography.CryptographicException: Padding is invalid and
cannot be removed.
at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
at System.Web.Mvc.AntiForgeryDataSerializer.Deserialize(String serializedToken)
--- End of inner exception stack trace ---
at System.Web.Mvc.AntiForgeryDataSerializer.Deserialize(String serializedToken)
at System.Web.Mvc.HtmlHelper.GetAntiForgeryTokenAndSetCookie(String salt, String domain, String path)
at System.Web.Mvc.HtmlHelper.AntiForgeryToken(String salt, String domain, String path)
Siehe auch hinzufügen: http://stackoverflow.com/quest ionen/1360078/asp-net-mvc-validierung-von-viewstate-mac-failed – Shog9