59

我在一个使用身份验证的 MVC 4 站点上工作。该站点要求我指定机器密钥值。我是通过 IIS 界面完成的,取消选择“在运行时自动生成”,生成键值并选择“为每个应用程序生成唯一键”

web.config 条目如下所示:

<machineKey decryption="DES" decryptionKey="{hex-key value},IsolateApps" 
    validationKey="{hex-key value},IsolateApps" />;

虽然这似乎在另一个 Web 项目上运行良好,但它会导致我现在正在使用的开发机器上出现“指定的解密密钥具有无效的十六进制字符”错误(在 IIS-Express 和 IIS 7.5 中)。

从键值中删除",IsolateApps"可以解决问题,但是由于我需要在生产中启用此选项,因此我不想现在删除它,只是在部署时遇到此问题。

是什么赋予了?开发盒是带有 .net 2.0 和 .net 4.0 的 SQL 2008 R2 盒。

4

3 回答 3

128

IsolateApps修饰符使 ASP.NET 为服务器上的每个应用程序生成一个唯一键。这仅适用于让 ASP.NET 在运行时自动生成密钥的情况。

如果您没有让 ASP.NET 自动生成密钥,而是使用 指定密钥decryptionKey="{hex-key value}",那么让 ASP.NET 为每个应用程序使用不同密钥的方法是在每个应用程序的 Web 中简单地指定一个不同的密钥。配置。

IIS 配置 GUI 允许您使用显式键和IsolateApps修饰符创建 Web.config,这是无效的,在我看来是配置 GUI 中的错误。

于 2013-03-14T03:44:14.283 回答
7

您可以通过将以下内容添加到 web.config 中的 machineKey 元素 (compatibilityMode="Framework20SP1") 来解决此问题,请参阅链接

于 2013-03-28T12:39:42.220 回答
2

这可以通过将 machineKey 行添加到您的 web.config 中来解决,并如下所示指定您的密钥(当然,使用您自己的密钥,这个很容易猜到):

<configuration>
 <system.web>
  <machineKey decryptionKey="0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0" validationKey="0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF00123456789ABCDEF0123456789ABCDEF0123456789ABCDEF00123456789ABCDEF0123456789ABCD" />
 </system.web>
</configuration>
于 2016-11-01T21:32:10.373 回答