ウェブホスティングにウェブサイトをアップロードしましたが、このエラーが発生しました。
'暗号化操作中にエラーが発生しました。'。
調査を行ったところ、formauthenticated CookieはMachineKeyにバインドされているようです(webhostを使用する場合は異なります)。
この問題を修正する方法を見つけましたが、エラーは残ります。
コード:
/// <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
問題を解決していない人には、web.configの暗号化/復号化の「machineKey」エントリがありませんでした。
私は同じ問題に直面しました。 ブラウザのcookieとcache dataをすべてクリアしたところ、修正されました。
フォーム認証を使用している場合。例外をキャッチするとサインアウトし、ユーザーがログインして有効なCookieを作成できるようにします
catch (CryptographicException cex)
{
FormsAuthentication.SignOut();
}
これは、暗号化と復号化を行うための対称キーとして使用されるマシンキーがないためです。
IISでマシンを設定するには;
アプリケーションに移動->マシンキー->キーを生成
これだけでなく、データベースからUserTokenCachesテーブルエントリを削除しました。
ASP.NET 2.0アプリで作成されたフォーム認証Cookieを取得し、.NET4.5 Web APIプロジェクト内で復号化しようとしたときに、この問題に遭遇しました。解決策は、Web apiのweb.configファイル内の「machineKey」ノードに「compatibilityMode」という属性を追加することでした。
<machineKey
...
compatibilityMode="Framework20SP2"/>
そして、ドキュメントから、その属性に許可されている値は次のとおりです。
protected void Application_Error(object sender_, CommandEventArgs e_)
{
Exception exception = Server.GetLastError();
if(exception is CryptographicException)
{
FormsAuthentication.SignOut();
}
}
global.asax.csで、 Global.asaxのエラーをキャッチ から、フォーム認証(ログイン/パスワード)を使用している限り。私のために働いた。
また、新しいソリューションを開発し、localhostでWebサイトを実行するときに、これを経験しました。 machinekeyを設定しても違いはありませんでしたが、localhostのすべてのCookieを削除するだけで問題は解決しました。
もう1つのオプションは、ブラウザ設定からCookieをクリアすることです。これにより、新しいCookieを保存できます。
シングルサインオンの実装時にこのエラーを受け取った場合(ここで説明されているように 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に変更すると、問題が修正されました。
AntiForgeryトークンの検証時に暗号化エラーが発生していました。
仮想メモリの制限が1,000,000キロバイトに達したときにリサイクルするようにアプリケーションのリサイクルを構成するために、サーバーにセキュリティコントロール構成の変更をいくつか加えたためだと思います。
これは間違いなく、仮想メモリのリサイクルには少なすぎます。プライベートメモリの使用量は1,000,000 KBに設定できますが、仮想メモリにはさらに多くのスペースを割り当てる必要があります。
私のアプリケーションは非常に頻繁にリサイクルされていることに気付きました。
仮想メモリの制限を10,000,000 KBに増やしたところ、これらのエラーはなくなりました。フォームに記入しているときに、アプリケーションプールがリサイクルされた可能性があると思います。
同じ問題がありました:MVC 5 ASP.Net Web Application .net Framework 4.6.1
解決: