切换 Web 服务器将停止 ASP.Net 成员资格验证用户/密码

本文关键字:验证 用户 密码 成员 Net 服务器 Web ASP 切换 | 更新日期: 2023-09-27 18:31:23

我刚刚创建了一个新的Web服务器(Windows Server 2012),并正在尝试登录到我们的网站(从旧的Web服务器直接复制文件)。从旧的Web服务器中,一切正常。尝试从新服务器登录时,我的密码被拒绝。我知道请求正在通过数据库服务器,因为我可以通过数据库服务器上的 SQL 事件探查器查看它们。

旧设置将网站和数据库放在同一台服务器上,新设置只是将网站移动到专用服务器上。数据库保持不变。

我唯一能想到的是密码是使用旧服务器的机器密钥进行哈希/加密的,尽管我们确实在 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>

切换 Web 服务器将停止 ASP.Net 成员资格验证用户/密码

假设两台服务器上的机器密钥配置完全相同......我看到您正在使用IsolateApps

来自 MSDN:"IsolateApps 修饰符使 ASP.NET 使用应用程序的应用程序 ID 为服务器上的每个应用程序生成唯一密钥"。

http://msdn.microsoft.com/en-us/library/ff649308.aspx

上述链接中的"Web 场部署注意事项"部分显示了应如何完成计算机密钥配置。

我以前从未经历过这种情况,所以不要完全相信接下来的几行......除非可以以某种方式使新应用程序具有相同的应用程序标识,否则这些密码现在只能由原始应用程序解密。我想你会从这里有两个选择:

  1. 如果您不关心密码恢复,请切换到哈希密码格式。有关更多帮助,请参阅此处:将密码格式从加密更改为散列

  2. 如果要坚持使用"加密",并且要维护密码,则需要从第一个应用程序中的一些手工制作的.Net代码中提取所有密码(类似于上面使用的代码)。然后,在正确重新配置机器密钥后,重新加密这些密码并存储到数据库中。此链接看起来很适合解密密码:解密来自 ASP.NET 2.0 成员资格的"加密"密码

注意:可能不需要这么说,但在应用于所有用户帐户记录之前,请先使用一个用户帐户进行测试。

是的,这可能是密码问题。我的直觉是....

在数据库中,执行:

SELECT PasswordFormat FROM aspnet_Membership WHERE UserId = {YourUserId} .

如果返回的值不是 0,则这很可能是问题所在。配置设置中的密码格式必须与数据库中记录的密码格式匹配。passwordFormat="Hashed"是最受欢迎的选择。(即从数据库的角度来看,密码格式 = 1)。

因此,如果数据库中是"1",请将您的配置设置为 passwordFormat="Hashed"

其他选项包括:"加密"(2)