Je vais avoir des problèmes avec la AntiForgeryToken dans ASP.Net MVC. Si je fais un iisreset sur mon serveur web et un utilisateur se poursuit avec leurs la séance, ils se faire rebondir vers une page de connexion. Pas terrible, mais alors le AntiForgery jeton de souffle et la seule façon d'aller de nouveau, c'est de souffler le cookie sur le navigateur.
Avec la version bêta de la version 1, il sert à aller mal lors de la lecture du cookie pour moi, donc j'ai utilisé pour frotter avant de demander un jeton de validation, mais qui a été résolu quand il a été libéré.
Pour l'instant je pense que je vais revenir à mon code qui fixe la bêta problème, mais je ne peux pas aider mais je pense que je suis absent quelque chose. Est-il une solution plus simple, diable devrais-je tout laisser tomber, de leur aide et en créer un nouveau à partir de zéro? J'ai le sentiment qu'une grande partie du problème est le fait qu'il est si profondément dans l'ancien ASP.Net pipeline et essaie de quelque chose en quelque chose qu'il n'était pas vraiment conçu pour faire.
J'ai eu un coup d'oeil dans le code source de la ASP.Net MVC 2 RC et il ne semble pas que le code a changé beaucoup alors que je n'ai pas essayé, je ne pense pas qu'il y a toutes les réponses.
Voici la partie pertinente de la trace de la pile de l'exception.
Edit: je viens de réaliser que je n'ai pas mentionné que c'est juste essayer d'insérer le jeton sur la requête GET. Ce n'est pas la validation qui se produit lorsque vous faites un POST coup d'envoi.
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)