У меня возникают проблемы с AntiForgeryToken в ASP.Net MVC. Если я сделаю iisreset на своем веб-сервере и пользователь продолжит свою сессию, они будут отскакивать на страницу входа. Не страшно, но тогда токен AntiForgery взорвется, и единственный способ вернуться - это снести куки файлы в браузере.
С бета-версией версии 1 она испортилась при чтении файла cookie для меня, поэтому я использовал его для очистки, прежде чем просить токен проверки, но это было исправлено, когда оно было выпущено.
На данный момент я думаю, что я вернусь к моему коду, который исправил проблему с бета-версией, но я не могу помочь, но думаю, что я что-то пропустил. Есть ли более простое решение, черт возьми, я должен просто бросить помощника и создать новый с нуля? У меня возникает ощущение, что большая проблема заключается в том, что он так глубоко привязан к старому конвейеру ASP.Net и пытается клонировать его, делая что-то, чего он не собирался делать.
Я просмотрел исходный код для ASP.Net MVC 2 RC, и это не похоже на то, что код сильно изменился, поэтому пока я его не пробовал, я не думаю, что есть ответы на него.
Вот соответствующая часть трассировки стека исключения.
Изменить: Я просто понял, что не упомянул, что это просто попытка вставить маркер в запрос GET. Это не проверка, которая возникает, когда вы запускаете POST.
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)