複数のサーバーとサブドメインでフォーム認証を設定しようとしています。次のように、アプリケーションごとに静的マシン キーを設定しています。
<system.web>
<machineKey validationKey="574...7A7"
decryptionKey="2C3...A0D"
validation="HMACSHA256"
decryption="AES" />
</system.web>
...そして、フォーム認証は各アプリケーションで同じように構成されています:
<forms loginUrl="/login" timeout="2880" defaultUrl="/" path="/" name=".SHAREDAUTH" domain="domain.com" protection="All" />
一部の人が示唆しているように、ドメインの前にピリオドを付けてみましたが、それもうまくいきませんでした。
これは、サブドメインごとに IIS で個別のサイトが設定されているローカル マシンで正常に動作します。また、すべてのサイトが 1 台のマシン上に存在する開発サーバーでも問題なく動作します。しかし、ステージング環境にデプロイすると、クロスドメイン認証が機能しなくなります。その環境では、プライマリ サイト (ログインが発生する場所) を 1 台のサーバーで実行し、セカンダリ サイト (認証を維持する必要がある場所) を 2 つの負荷分散サーバーで実行しています。すべてが Windows 7 (ローカル) または Server 2008 R2 (開発およびステージング) の IIS 7 で実行されています。
プライマリ サイトで文字列をエンコードMachineKey.Encode
し、セカンダリ サーバーで結果をデコードして、マシン キーが同じであるMachineKey.Decode.
ことを確認しましたFirefox と Chrome によって報告されたヘッダーと、デバッガーをフックするApplication_BeginRequest
と、実行Application_AuthenticateRequest.
中に Cookie が表示されますが、呼び出されると消えてしまいます。私が収集できることから、それは認証チケットの逆シリアル化が失敗したことを意味しているようですが、異なるマシンキーは別として、マルチサーバー環境では発生する可能性があり、単一サーバー環境では発生しない理由がわかりません、私がすでに確認したことはそうではありませんでした。Application_BeginRequest
Application_AuthenticateRequest
また、カスタムの MembershipProvider と RoleProvider をセットアップしましたが、これらは各サイトで独立して正常に動作します。
私は何が欠けていますか?