2011-07-21 40 views
5

默认情况下,机器密钥设置是自动生成的,并且是每个应用程序(AutoGenerate,IsolateApps)。 MSDN指出解密密钥和验证密钥基于Web应用程序ID。我在IIS 7服务器上托管了两个ASP.NET MVC 2站点,但发现机器密钥相同。我通过使用反射验证了这一点,以查看ValidationKeyInternal和DecryptionKeyInternal属性。我还通过在一个站点上生成一个反伪造令牌cookie并将其传递给另一个站点来测试它,并且可以读取该cookie。ASP.NET中的自动机器密钥生成

经过反复试验,我发现如果应用程序池标识更改,密钥将会更改。这两个站点具有相同的密钥,因为它们在网络服务凭据下运行。一旦我更改了一个站点的应用程序池标识,他们就开始拥有不同的验证/加密密钥。

但是,在将这两个站点部署到另一台服务器后,即使在更改应用程序池标识后,我也始终获得相同的机器密钥。这两台服务器具有相同的硬件和软件配置。

我想知道是否有关于在AutoGenerate,IsolateApps设置下如何生成机器密钥的实际逻辑的参考。在网络上,有很多文章谈论在Web场景中设置相同的机器密钥。但是我遇到了另一面的问题。每个Web应用程序自动生成密钥似乎不能正常工作。有没有人有过同样的问题?

+0

你描述的是非典型的。根据我的经验,它已经像广告中那样工作。我有两个应用程序在同一个应用程序池共享表单身份验证票中运行。除非我将machinkey设置为相同,否则他们不能共享票据。 –

+0

我从来没有想过,直到我遇到问题才会起作用。痛苦是我需要找到两台服务器上发生的事情的解释。 – intangible02

回答

0

您是否有可能覆盖IIS设置的web.config设置?这可能是一个因素,因为如果你告诉服务器使用特定的密钥,那么他们可以做到这一点。

+0

如果我使用IIS管理控制台更改设置,则更改将保留在web.config中。它们是一致的。这也意味着我在IIS管理控制台中看到的是基于配置文件hieharchy的合并结果。顺便说一下,我通过在IIS和Visual Studio开发Web服务器中托管项目来进行测试。 – intangible02