我在 IIS 7.5 中托管了两个 Web 应用程序。他们必须共享 ASP.NET Forms Authentication cookie。由于我不想将机器密钥放在 Web.config 中(我没有使用网络农场,并且我不希望密钥在 web.config 文件中可见),我已将其设置为自动生成以下设置:
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" />
根据文档,这应该会导致 IIS 为两个 Web 应用程序自动生成相同的机器密钥。在我的 Windows 7 和 Windows 8 开发人员机器上,这按预期工作。任何一个 Web 应用程序都可以对用户进行身份验证,并且两个应用程序都识别相同的身份验证 cookie。
但是,当我将此设置转移到在 Windows Server 2008 R2 上运行的生产环境中时,这两个应用程序将不会共享身份验证 cookie。当 WebAppA 对用户进行身份验证时,WebAppB 无法解密 auth cookie 并强制用户重新进行身份验证。当他们这样做时,新的身份验证 cookie 对 WebAppA 无效。
我已经通过将两个应用程序中的机器密钥显式设置为相同的密钥来证明它使用单独的机器密钥:
<machineKey validationKey="F801AB..." decryptionKey="ADB3C1..." />
当我这样做时,身份验证就像在我的开发人员机器上一样工作。
我的开发和生产环境之间的差异可能会导致这种情况吗?