默认情况下,机器密钥设置是自动生成和每个应用程序(AutoGenerate,IsolateApps)。MSDN 声明解密密钥和验证密钥基于 Web 应用程序 ID。我在我的 IIS 7 服务器上托管了两个 ASP.NET MVC 2 站点,但发现机器密钥是相同的。我通过使用反射查看 ValidationKeyInternal 和 DecryptionKeyInternal 属性来验证这一点。我还通过在一个站点上生成一个防伪令牌 cookie 并将其传递给另一个站点来测试它,并且可以读取该 cookie。
经过反复试验,我发现如果应用程序池标识更改,密钥也会更改。这两个站点具有相同的密钥,因为它们在网络服务凭据下运行。一旦我更改了一个站点的应用程序池标识,它们就会开始具有不同的验证/加密密钥。
但是,在我将这两个站点部署到另一台服务器后,即使更改了应用程序池标识,我也总是获得相同的机器密钥。两台服务器具有相同的硬件和软件配置。
我想知道在 AutoGenerate,IsolateApps 设置下是否有关于如何生成机器密钥的实际逻辑的参考。在网络上,有很多文章在谈论在网络农场场景中设置相同的机器密钥。但是我在对面遇到了一个问题。每个 Web 应用程序的自动密钥生成似乎无法正常工作。有没有人以前有同样的问题?