我刚刚创建了一个新的Web服务器(Windows Server 2012),我正在尝试登录我们的网站(从旧的Web服务器直接复制文件)。从旧的Web服务器,一切工作仍然很好。尝试从新服务器登录时,我的密码被拒绝。我知道请求正在通过DB服务器,因为我可以通过数据库服务器上的SQL Profiler看到它们。
旧设置将网站和数据库放在同一台服务器上,新设置只是将网站移动到专用服务器上。数据库保持不变。
我唯一能想到的是密码是使用旧服务器的机器密钥进行哈希/加密的,虽然我们在web.config中指定了一个机器密钥,所以这不应该是一个问题。
<!-- Key information as using encrypted passwords -->
<machineKey validationKey="xxx,IsolateApps" decryptionKey="xxx,IsolateApps" validation="3DES"/>
<!-- Membership, Role & Personalisation Providers -->
<membership>
<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider" connectionStringName="SqlAspNetDB"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false"
applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear"
maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression="" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0"/>
</providers>
</membership>
答案 0 :(得分:1)
是的,这可能是密码问题。我的直觉是....
在您的数据库中,执行:
SELECT PasswordFormat FROM aspnet_Membership WHERE UserId = {YourUserId}
。
如果返回的值是而不是 0,则很可能是问题所在。配置设置中的passwordFormat必须与数据库中记录的密码格式匹配。了passwordFormat =&#34;散列&#34;是最受欢迎的选择。 (即从数据库角度看PasswordFormat = 1。)
所以如果它是&#34; 1&#34;在数据库中,将您的配置设置为passwordFormat =&#34; Hashed&#34;
其他选项包括:&#34;加密&#34; (2)
答案 1 :(得分:1)
假设两台服务器上的machineKey配置完全相同...... 我发现您使用的是 IsolateApps 。
来自MSDN:&#34; IsolateApps修饰符使ASP.NET通过使用您的应用程序的应用程序ID为服务器上的每个应用程序生成唯一键。
http://msdn.microsoft.com/en-us/library/ff649308.aspx
上面链接中的“Web场部署注意事项”部分显示了如何完成machineKey配置。
我从未经历过这种情况,所以不要完全信任接下来的几行...... 除非您能以某种方式使您的新应用程序具有相同的应用程序标识,否则这些密码现在只能由您的原始应用程序解密。我想你可以从这里有两个选择:
如果您不关心密码恢复,请切换到Hashed passwordFormat。有关更多帮助,请参阅此 Changing passwordFormat from Encrypted to Hashed
如果你想坚持加密,如果你想维护密码,你需要从你的第一个应用程序中的一些手工制作的.Net代码中提取所有密码为Clear Text(类似于上面使用的代码) )。然后,在正确重新配置machineKey之后,重新加密这些密码并存储到数据库中。此链接看起来很适合解密密码: Decrypting an 'Encrypted' password from ASP.NET 2.0 Membership
注意:可能不需要这样说,但在申请所有用户帐户记录之前先使用一个用户帐户进行测试。 : - )