Подтвердить что ты не робот

"Ошибка при криптографической операции" при расшифровке файлов cookie форм

Я загрузил свой сайт на веб-хостинг, и эта ошибка возникла;
' Ошибка при криптографической операции.

Я провел некоторое исследование, и похоже, что 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
4b9b3361

Ответ 1

Для тех, кто не решил свою проблему, мне не хватало записи "machineKey" для шифрования/дешифрования в моем web.config

Ответ 2

Если вы используете формы auth. вы можете выписать, когда вы поймаете исключение и разрешите своим пользователям входить в систему и создавать допустимый файл cookie

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}

Ответ 3

Я столкнулся с той же проблемой. Я просто удалил все файлы cookie браузера и данные кэша, и он получил исправление. Я надеюсь, что это сработает и для вас.

Ответ 4

Это связано с отсутствием машинного ключа, который используется в качестве симметричного ключа для шифрования и дешифрования.

Чтобы установить машину в IIS,

Перейти к вашему приложению → Ключи машины → Создать ключи

Ответ 5

Я также испытал это при разработке нового решения и запуске веб-сайта на localhost. Установка машинного ключа не имела никакого значения, но просто удаление всех файлов cookie для localhost решило проблему.

Ответ 6

Если вы получаете эту ошибку при внедрении единого входа (как описано здесь 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 исправило проблему для меня.

Ответ 7

Я столкнулся с этой проблемой, когда попытался использовать 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

И из документа, вот допустимые значения для этого атрибута:

  • Framework20SP1. Это значение указывает, что ASP.NET использует методы шифрования, доступные в версиях ASP.NET раньше 2.0 SP2. Используйте это значение для всех серверов в веб-ферме, если какой-либо сервер имеет версию .NET Framework раньше 2.0 SP2. Это значение по умолчанию, если файл приложения Web.config не имеет атрибута targetFramework для элемента httpRuntime, установленного на "4.5".
  • Framework20SP2. Это значение указывает, что ASP.NET использует обновленные методы шифрования, которые были внедрены в .NET Framework 2.0 с пакетом обновления 2 (SP2). Используйте это значение для всех серверов в веб-ферме, если на всех серверах есть .NET Framework 2.0 с пакетом обновления 2 (SP2) или более поздней версии, но по крайней мере один из них не имеет .NET Framework 4.5.
  • Framework45. Криптографические улучшения для ASP.NET 4.5 действуют. Это значение по умолчанию, если файл приложения Web.config имеет атрибут targetFramework для элемента httpRuntime, установленного на "4.5".

Ответ 8

У меня просто было это, я удалил записи таблицы UserTokenCaches из базы данных.

Ответ 9

У меня была такая же проблема: MVC 5 ASP.Net Web Application.net Framework 4.6.1

Решение:

  • Перейдите в папку App_Data (Solution explorer)
  • Дважды щелкните в своем NAME.mdf(это действие открывает вкладку проводника сервера)
  • Щелкните правой кнопкой мыши на таблице UserTokenCaches и просмотрите Показать данные таблицы
  • Удалить строку
  • Запустите приложение еще раз, и все будет в порядке

Ответ 10

       protected void Application_Error(object sender_, CommandEventArgs e_)
    {
        Exception exception = Server.GetLastError();
        if(exception is CryptographicException)
        {
            FormsAuthentication.SignOut();
        }
    }

в вашем файле Global.asax.cs, Ловушка ошибок в Global.asax, если вы используете аутентификацию по формам (логин/пароль). Работал для меня.