web-dev-qa-db-ja.com

Forms Cookieを復号化する際の「暗号化操作中にエラーが発生しました」

ウェブホスティングにウェブサイトをアップロードしましたが、このエラーが発生しました。
'暗号化操作中にエラーが発生しました。'。

調査を行ったところ、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
36

問題を解決していない人には、web.configの暗号化/復号化の「machineKey」エントリがありませんでした。

25
Grace

私は同じ問題に直面しました。 ブラウザのcookiecache dataをすべてクリアしたところ、修正されました。

25
Baqer Naqvi

フォーム認証を使用している場合。例外をキャッチするとサインアウトし、ユーザーがログインして有効なCookieを作成できるようにします

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}
18
Ozan BAYRAM

これは、暗号化と復号化を行うための対称キーとして使用されるマシンキーがないためです。

IISでマシンを設定するには;

アプリケーションに移動->マシンキー->キーを生成

7
Ghaleb Badran

これだけでなく、データベースからUserTokenCachesテーブルエントリを削除しました。

6
Jim Wolff

ASP.NET 2.0アプリで作成されたフォーム認証Cookieを取得し、.NET4.5 Web APIプロジェクト内で復号化しようとしたときに、この問題に遭遇しました。解決策は、Web apiのweb.configファイル内の「machineKey」ノードに「compatibilityMode」という属性を追加することでした。

<machineKey 
...
compatibilityMode="Framework20SP2"/>

ドキュメント: https://msdn.Microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

そして、ドキュメントから、その属性に許可されている値は次のとおりです。

  • Framework20SP1。この値は、ASP.NETが2.0 SP2より前のバージョンのASP.NETで使用可能であった暗号化方法を使用することを指定します。サーバーに2.0 SP2より前のバージョンの.NET Frameworkがある場合、Webファーム内のすべてのサーバーにこの値を使用します。これは、アプリケーションのWeb.configファイルのhttpRuntime要素のtargetFramework属性が「4.5」に設定されていない限り、デフォルト値です。
  • Framework20SP2。この値は、ASP.NETが.NET Framework 2.0 SP2で導入されたアップグレードされた暗号化方法を使用することを指定します。すべてのサーバーに.NET Framework 2.0 SP2以降が搭載されているが、少なくとも1つに.NET Framework 4.5が搭載されていない場合、Webファーム内のすべてのサーバーにこの値を使用します。
  • Framework45。 ASP.NET 4.5の暗号化の機能強化が有効です。これは、アプリケーションのWeb.configファイルのhttpRuntime要素のtargetFramework属性が「4.5」に設定されている場合のデフォルト値です。
6
jwill212
       protected void Application_Error(object sender_, CommandEventArgs e_)
    {
        Exception exception = Server.GetLastError();
        if(exception is CryptographicException)
        {
            FormsAuthentication.SignOut();
        }
    }

global.asax.csで、 Global.asaxのエラーをキャッチ から、フォーム認証(ログイン/パスワード)を使用している限り。私のために働いた。

3
barbara.post

また、新しいソリューションを開発し、localhostでWebサイトを実行するときに、これを経験しました。 machinekeyを設定しても違いはありませんでしたが、localhostのすべてのCookieを削除するだけで問題は解決しました。

3
andreasnico

もう1つのオプションは、ブラウザ設定からCookieをクリアすることです。これにより、新しいCookieを保存できます。

3
Manoj Patil

シングルサインオンの実装時にこのエラーを受け取った場合(ここで説明されているように 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に変更すると、問題が修正されました。

2
SzilardD

AntiForgeryトークンの検証時に暗号化エラーが発生していました。

仮想メモリの制限が1,000,000キロバイトに達したときにリサイクルするようにアプリケーションのリサイクルを構成するために、サーバーにセキュリティコントロール構成の変更をいくつか加えたためだと思います。

これは間違いなく、仮想メモリのリサイクルには少なすぎます。プライベートメモリの使用量は1,000,000 KBに設定できますが、仮想メモリにはさらに多くのスペースを割り当てる必要があります。

私のアプリケーションは非常に頻繁にリサイクルされていることに気付きました。

仮想メモリの制限を10,000,000 KBに増やしたところ、これらのエラーはなくなりました。フォームに記入しているときに、アプリケーションプールがリサイクルされた可能性があると思います。

1
WWC

同じ問題がありました:MVC 5 ASP.Net Web Application .net Framework 4.6.1

解決:

  1. App_Dataフォルダーに移動します(ソリューションエクスプローラー)
  2. NAME.mdfをダブルクリックします(このアクションにより[サーバーエクスプローラー]タブが開きます)
  3. UserTokenCachesテーブルを右クリックして、Show Table Dataを表示します
  4. 行を削除する
  5. アプリを再度実行すると、すべてが正常になります
0
Luis Eduardo