Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ValidateUser()在IIS上失败,但在具有SqlMembershipProvider的开发服务器上失败_Asp.net_Asp.net Membership - Fatal编程技术网

Asp.net ValidateUser()在IIS上失败,但在具有SqlMembershipProvider的开发服务器上失败

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

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

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项目测试了它,同样的问题
我走对了吗? 有没有办法使验证/密码加密/解密独立于URL/应用程序名

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

否。相反,ASP.Net成员资格提供程序使用机器密钥(除salt外)加密和解密密码

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

如果知道机器密钥,请将其显式保存在本地IIS的web.config中

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

更新:7/9/2013 如果不显式分配机器密钥,应用程序将默认使用自动生成的密钥


我解决了它。多亏了@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的默认设置。我检查了它,我没有手动设置密钥,但根目录下和虚拟目录中的应用程序具有相同的密钥。我的第一个猜测是您的应用程序正在使用自动生成的密钥(我可能也错了)。在这一点上,找到答案的唯一方法是按照我答案中的链接检索旧密钥。