Ответ 1
Для тех, кто не решил свою проблему, мне не хватало записи "machineKey" для шифрования/дешифрования в моем web.config
Я загрузил свой сайт на веб-хостинг, и эта ошибка возникла;
' Ошибка при криптографической операции.
Я провел некоторое исследование, и похоже, что cookie с проверкой формы привязана к MachineKey (который отличается при использовании веб-хостинга).
Я нашел метод, который должен исправить эту проблему, но ошибка остается.
CODE:
/// <summary>
/// This method removes a cookie if the machine key is different than the one that saved the cookie;
/// </summary>
protected void Application_Error(object sender, EventArgs e)
{
var error = Server.GetLastError();
var cryptoEx = error as CryptographicException;
if (cryptoEx != null)
{
FederatedAuthentication.WSFederationAuthenticationModule.SignOut();
Global.Cookies.FormAuthenticated Cookie = new Global.Cookies.FormAuthenticated();
Cookie.Delete();
Server.ClearError();
}
}
StackTrace:
[CryptographicException: Error occurred during a cryptographic operation.]
System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) +115
System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte[] protectedData) +59
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +9824926
Archive_Template.Main.resolveLoginUser(String sessionKey) in f:\Archive_Template\Archive_Template\Main.aspx.cs:481
Archive_Template.Main.OnPreInit(EventArgs e) in f:\Archive_Template\Archive_Template\Main.aspx.cs:52
System.Web.UI.Page.PerformPreInit() +31
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +335
Для тех, кто не решил свою проблему, мне не хватало записи "machineKey" для шифрования/дешифрования в моем web.config
Если вы используете формы auth. вы можете выписать, когда вы поймаете исключение и разрешите своим пользователям входить в систему и создавать допустимый файл cookie
catch (CryptographicException cex)
{
FormsAuthentication.SignOut();
}
Я столкнулся с той же проблемой. Я просто удалил все файлы cookie браузера и данные кэша, и он получил исправление. Я надеюсь, что это сработает и для вас.
Это связано с отсутствием машинного ключа, который используется в качестве симметричного ключа для шифрования и дешифрования.
Чтобы установить машину в IIS,
Перейти к вашему приложению → Ключи машины → Создать ключи
Я также испытал это при разработке нового решения и запуске веб-сайта на localhost. Установка машинного ключа не имела никакого значения, но просто удаление всех файлов cookie для localhost решило проблему.
Если вы получаете эту ошибку при внедрении единого входа (как описано здесь http://www.alexboyang.com/2014/05/28/sso-for-asp-net-mvc4-and-mvc5-web-apps-shared-the-same-domain/), убедитесь, что у вас одинаковая целевая структура все проекты. У меня был один проект с .NET 4.0, а другой - на .NET 4.5.2.
Изменение первого варианта на 4.5.2 исправило проблему для меня.
Я столкнулся с этой проблемой, когда попытался использовать cookie файлы cookie форм, созданные приложением ASP.NET 2.0, и расшифровать его в проекте веб-API.NET4.5. Решением было добавить атрибут под названием "compatMode" в "machineKey" node внутри моего веб файла api web.config:
<machineKey
...
compatibilityMode="Framework20SP2"/>
Документация: https://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
И из документа, вот допустимые значения для этого атрибута:
У меня просто было это, я удалил записи таблицы UserTokenCaches из базы данных.
У меня была такая же проблема: MVC 5 ASP.Net Web Application.net Framework 4.6.1
Решение:
protected void Application_Error(object sender_, CommandEventArgs e_)
{
Exception exception = Server.GetLastError();
if(exception is CryptographicException)
{
FormsAuthentication.SignOut();
}
}
в вашем файле Global.asax.cs, Ловушка ошибок в Global.asax, если вы используете аутентификацию по формам (логин/пароль). Работал для меня.