IIS 7.5で2つのWebアプリをホストしています。これらはASP.NETフォーム認証Cookieを共有する必要があります。マシンキーをWeb.configに配置したくないので( Webファームを使用していて、web.configファイルにキーを表示したくない場合は、次の設定で自動生成するように設定しました。
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" />
ドキュメント によると、これによりIISが2つのWebアプリに対して同じマシンキーを自動生成します。私のWindows 7およびWindows 8開発者マシンでは、このどちらのWebアプリでもユーザーを認証でき、両方のアプリが同じ認証Cookieを認識します。
しかし、このセットアップをWindows Server 2008 R2で稼働する本番環境に移動すると、2つのアプリは認証Cookieを共有しなくなります。 WebAppAがユーザーを認証するとき、WebAppBは認証Cookieを復号化できず、ユーザーに再認証を強制します。その場合、新しい認証CookieはWebAppAでは無効です。
両方のアプリのマシンキーを明示的に同じキーに設定することで、個別のマシンキーを使用していることを証明しました。
<machineKey validationKey="F801AB..." decryptionKey="ADB3C1..." />
私がこれを行うと、認証は私の開発者のマシンと同じように機能します。
開発環境と本番環境の違いは、これを引き起こしているのでしょうか?
IISが自動的にマシンキーを生成する場合、それはHKEY_CURRENT_USERに格納されます。したがって、自動生成されたマシンキーを共有するには、Webアプリは同じユーザーとして実行されている必要があります。詳細は このブログ投稿 にあります。関連する抜粋は次のとおりです:
ベースマシンキーは、レジストリの次の場所に格納されています。
HKCU\Software\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeyV4
このキーはHKEY_CURRENT_USERハイブに置かれているため、生成されたマシンキーは、アプリケーションプロファイルを実行するユーザーのものであることに注意してください。これは、同じプロセスIDで実行されているIISに2つのアプリケーションがある場合、それらは同じマシンキーを使用することを意味します!
私の場合、2つのWebアプリは異なるIDの下で別々のアプリプールで実行されていました。したがって、異なるマシンキーを生成しました。私の開発マシンでは、それらは同じIDとして実行されていました。
2つのアプリを同じアプリプールに配置する(または両方のアプリプールを同じIDで実行する)ことにより、同じ自動生成されたマシンキーを使用しました。