0

我有一个从 MVC2 升级的 MVC4 项目。在使用 VS 开发服务器进行调试时,用户验证工作正常。但是当我尝试使用本地 IIS 进行调试时,由于密码错误,登录失败。在生产系统上,用户验证也可以正常工作。开发服务器/生产系统和本地 IIS 之间的唯一区别是,网站在本地 IIS 的虚拟目录中运行。因此 URL 位于开发服务器/生产环境中,例如:

http://localhost:12345/ OR http://the.production.server/

但在本地 IIS 上,它类似于:

http://localhost/mymvcproject/

如果我将网站移动到本地 IIS 的根目录,则登录工作正常。

在 web.config 成员配置如下:

<membership>
      <providers>                
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordReset="true" passwordFormat="Encrypted" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="50" minRequiredPasswordLength="6" passwordAttemptWindow="10" applicationName="/" />
      </providers>
</membership>

我认为问题在于 applicationName 参数,但我没有更改它。我检查的事情:

  • 数据库数据始终相同
  • 在虚拟目录中创建和验证新用户确实可以在本地 IIS 上工作
  • 我也用原来的 MVC2 项目测试过,同样的问题

我在正确的道路上吗?有没有办法使验证/密码加密/解密独立于 URL/应用程序名称?

4

2 回答 2

1

有没有办法使验证/密码加密/解密独立于 URL/应用程序名称?

不是。相反,ASP.Net Membership 提供程序使用机器密钥(除了 salt)来加密和解密密码。

通常,您希望在应用程序的 web.config 中明确包含机器密钥以避免这种饱和。

如果您知道机器密钥,请将其明确保存在本地 IIS 的 web.config 中。

如果您不知道机器密钥,请使用以下方法检索它。

http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey

更新:2013 年 7 月 9 日

如果您没有明确分配机器密钥,应用程序将默认使用自动生成的密钥。

在此处输入图像描述

于 2013-07-08T19:51:39.620 回答
1

我解决了。感谢@Win,你把我推到了机器钥匙上。为了清楚起见,我知道机器钥匙。机键设置中没有看到那个小IsolateApps参数,就是“键”。使用这样配置的机器密钥:

<machineKey validationKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,IsolateApps" decryptionKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,IsolateApps" validation="AES" />

我有我在问题中描述的行为。但是没有IsolateApps这样的:

<machineKey validationKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" decryptionKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" validation="AES" />

一切正常,无论应用程序是在根目录还是虚拟目录中。但是有一个问题!我像这样更改机器(不是值,只删除IsolateApps参数),现有用户的用户验证失败。只能验证新创建的用户。

相应的 MSDN 页面是http://msdn.microsoft.com/en-us/library/vstudio/w8h3skw9(v=vs.100).aspx

于 2013-07-09T17:51:19.037 回答