ValidateUser()在IIS上失败,但在带有SqlMembershipProvider的Development Server上失败

时间:2013-07-08 08:28:58

标签: asp.net asp.net-membership

我有一个从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 /应用程序名称中独立进行验证/密码加密/解密?

2 个答案:

答案 0 :(得分:1)

  

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

否。相反,ASP.Net成员资格提供程序使用Machine Key(除了salt)来加密和解密密码。

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

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

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

http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey

更新:2013年7月9日

如果您没有明确指定机器密钥,默认情况下应用程序将使用自动生成的密钥。

enter image description here

答案 1 :(得分:1)

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

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

我的行为就像我在问题中描述的那样。但没有这样的IsolateApps

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

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

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