我有一个使用Membership提供程序的ASP.NET应用程序。我刚刚将应用程序和相关数据库复制到新服务器,现在我无法登录。我已经确认数据库连接字符串是正确的,并且应用程序可以与数据库通信 - 问题在于某处的成员资格提供程序。
在两台服务器上,应用程序都设置为使用ASP.NET 4.0;旧服务器正在运行IIS 7.0,而新的服务器是IIS 7.5。该应用程序是使用Web Deploy工具复制的,因此它在两台服务器上都是相同的。
在阅读this blog post之后 - 这似乎准确地描述了问题,并指出问题可能是由于applicationName
属性在每台服务器上设置不同 - 我检查了旧服务器和新服务器,并且确认配置中的applicationName
在两台服务器上都设置为相同的值(“/”) - 这是<membership>
下的完整配置条目:
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="Default"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
我还检查了aspnet_Applications表,并且有一条记录,其中ApplicationName ='/'和LoweredApplicationName ='/' - 因此配置文件中的applicationName
值得到了尊重。
我的下一个想法是,使用旧服务器的machineKey加密密码,这与新服务器上的machineKey不同。但是,正如您在上面的配置条目中所看到的,passwordFormat
键未在config中设置(在任一服务器上)。我找不到任何文档来指示此属性的默认值,但在数据库表aspnet_Membership上,每条记录的PasswordFormat
都设置为1,according to this page表示密码已经过哈希处理,未加密
尽管如此,我调查了是否可以将machineKey从一台服务器复制到另一台服务器 - 但旧服务器设置为AutoGenerate,所以我不知道这是否可行。如果是的话,我认为它不会像(AFAIK)那样帮助machineKey不参与散列。
最后一件事 - 处理此问题的应用程序位于另一个应用程序的子文件夹中。我认为没有任何区别,但我想我会提到它。子应用程序未设置为IIS中的应用程序,它只是一个文件夹。
总而言之,我不知道该怎么办。据我所知,应用程序(在两台服务器上)都是对密码进行哈希处理,而不是对它们进行加密,因此它应该可以正常运行。我很感激任何有关检查内容的建议。