Asp.net ValidateUser()在IIS上失败,但在具有SqlMembershipProvider的开发服务器上失败
我有一个MVC4项目,它是从MVC2升级而来的。使用VS development server进行调试时,用户验证工作正常。但是当我尝试使用本地IIS进行调试时,由于密码错误,登录失败。 在生产系统上,用户验证也可以正常工作。 开发服务器/生产系统与本地IIS之间的唯一区别是,网站运行在本地IIS上的虚拟目录中。所以URL是 在开发服务器/生产服务器上,类似于:Asp.net ValidateUser()在IIS上失败,但在具有SqlMembershipProvider的开发服务器上失败,asp.net,asp.net-membership,Asp.net,Asp.net Membership,我有一个MVC4项目,它是从MVC2升级而来的。使用VS development server进行调试时,用户验证工作正常。但是当我尝试使用本地IIS进行调试时,由于密码错误,登录失败。 在生产系统上,用户验证也可以正常工作。 开发服务器/生产系统与本地IIS之间的唯一区别是,网站运行在本地IIS上的虚拟目录中。所以URL是 在开发服务器/生产服务器上,类似于: http://localhost:12345/ OR http://the.production.server/ http://lo
http://localhost:12345/ OR http://the.production.server/
http://localhost/mymvcproject/
但在本地IIS上,它有点像:
http://localhost:12345/ OR http://the.production.server/
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项目测试了它,同样的问题
我解决了它。多亏了@Win,你把我推到了机器钥匙旁。我只想说清楚,我知道机器的钥匙。 我没有看到机器钥匙设置中的小
IsolateApps
参数,即“钥匙”。
使用如下配置的机器密钥:
<machineKey validationKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,IsolateApps" decryptionKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,IsolateApps" validation="AES" />
<machineKey validationKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" decryptionKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" validation="AES" />
无论应用程序是在根目录中还是在虚拟目录中,一切都正常工作。但是有一个陷阱!如果像这样更改机器(不是值,只删除IsolateApps
参数),现有用户的用户验证将失败。只能验证新创建的用户
相应的MSDN页面是。您检查过IIS端的身份验证配置吗?@AndreiMikhalevich是的,我检查过了,看起来一切正常。是否有一种设置可以导致/解决此问题?您是否尝试过将其托管在某个端口下,而不是虚拟文件夹?@AndreiMikhalevich这正是开发服务器所做的。我更新我的问题。如果您查看名为
ApplicationServices
的连接字符串,它是否可从您的live环境中获得?谢谢您的回答,但我知道maschine密钥,它包含在web.config中。如果我将其存储在IIS web.config中,是否意味着IIS上的所有应用程序都使用此密钥?应用程序设置不应该覆盖IIS设置吗?如果计算机密钥不在应用程序级别的web.config中,则应用程序很可能使用自动生成的密钥,而不是服务器级别的密钥。请查看更新的屏幕截图,这是IIS的默认设置。我检查了它,我没有手动设置密钥,但根目录下和虚拟目录中的应用程序具有相同的密钥。我的第一个猜测是您的应用程序正在使用自动生成的密钥(我可能也错了)。在这一点上,找到答案的唯一方法是按照我答案中的链接检索旧密钥。