22

状況は次のとおりです。

Web サイト間で Cookie (フォーム認証) を共有しようとしています。

私はフォーム認証自体を使用していません。組み込みのメソッド (暗号化、復号化など) を使用していますが、独自のカスタム Cookie を設定しています。

Web サイトの 1 つで Cookie を設定すると、他の Web サイトでは Cookie が表示されますが、復号化できません。エラーは、一般的な「暗号化操作中にエラーが発生しました」です。

私が保証したこと:

  1. Cookie のドメインは「example.com」に設定されています (これは、サブドメインがアクセスできることを意味します。他の Web サイトが Cookie を「見る」ことができるという証拠です)。
  2. 両方の Web サイトが同じマシン キーを共有します。両方の web.config には、decryptionKey と validationKey の同じ値があります。
  3. フォーム認証チケットのバージョンと Cookie 名は、両方の Web サイトで同じです。
  4. パスは「/」に設定されます。

以前にこれを行ったことがあり、正常に動作しますが、そのシナリオでは、両方のアプリケーションが同じコード ベースを共有していました。

この場合、それらは別個のアプリケーションです。これは、同じ最上位ドメインにあるプラットフォームに依存しない 2 つのアプリケーションが認証 Cookie を共有できるソリューションのプロトタイプを作成しているためです。

不足しているものを誰かに教えてもらえますか、または別の解決策を提供してもらえますか?

関連するすべての質問を読みましたが、答えは通常上記の 2) です。

4

2 に答える 2

40

新しい ASP.NET 4.5 (ASP.NET MVC 4 など) アプリケーションを作成すると、次の行が web.config に追加されます。

<httpRuntime targetFramework="4.5" />

これは、おそらく私の他のアプリケーションが 4.5 にアップグレードされた ASP.NET 3.5 アプリケーションであったために、私の他のアプリケーションには存在しませんでした。

新しい ASP.NET Web アプリケーションでその行を削除すると、問題が修正されました。

これは互換性モードの値によるものだと思います: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

フレームワーク45。ASP.NET 4.5 の暗号化の機能強化が有効になっています。これは、アプリケーションの Web.config ファイルの httpRuntime 要素の targetFramework 属性が "4.5" に設定されている場合の既定値です。

その行を削除することで問題がどのように解決されたかわかりません。アプリケーション1にはそのhttpRuntime要素がなかったので、異なる互換性モードがあると思います。

于 2013-02-18T01:00:58.177 に答える
15

これを処理する最善の方法は、マシンキーの復号化を Framework20SP2 に戻すことです。

この記事から: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

その属性を .net 4.5 アプリケーションの machinekey に追加するだけです

<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />

今すぐ httpruntime から targetFramework="4.5" を削除する必要はありません。

于 2014-01-13T09:40:44.007 に答える