我有一个从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参数,但我没有更改它。 我检查过的事情:
我是在正确的道路上吗? 有没有办法从URL /应用程序名称中独立进行验证/密码加密/解密?
答案 0 :(得分:1)
有没有办法进行验证/密码加密/解密 独立于URL /应用程序名称?
否。相反,ASP.Net成员资格提供程序使用Machine Key(除了salt)来加密和解密密码。
通常,您希望明确地在应用程序的web.config中包含一个机器密钥以避免这种饱和。
如果您知道机器密钥,请将其保存在Local IIS的web.config中。
如果您不知道机器密钥,请使用以下方法检索它。
http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey
如果您没有明确指定机器密钥,默认情况下应用程序将使用自动生成的密钥。
答案 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。