我无法使用.net 4.0版本的应用使用任何会员帐户登录。它失败就像密码错误一样,FailedPasswordAttemptCount在my_aspnet_membership表中递增。 (我正在使用mysql会员提供商的会员资格。)
我可以创建新用户。它们出现在数据库中。但是我无法使用新的用户凭据登录(是的,IsApproved是1)。
一个线索是,对于使用asp.net 4.0版本创建的用户,数据库中的散列密码更长,例如3lwRden4e4Cm + cWVY / spa8oC3XGiKyQ2UWs5fxQ5l7g =,旧的.net 3.5都是+ JQf1EcttK + 3fZiFpbBANKVa92c = 。
当使用.net 3.5版本连接到同一个数据库时,我仍然可以登录,但仅限于旧帐户,而不是使用.net 4.0版本创建的新帐户。 4.0版本无法登录任何帐户。
我尝试在我的测试系统上删除整个数据库,然后在第一次运行时自动创建成员资格表,但它仍然是相同的,可以创建用户,但无法登录。
答案 0 :(得分:13)
请参阅:HERE
.net 4.0的默认哈希算法已更改。默认哈希算法现在是HMACSHA256。早期版本的ASP.NET使用较旧的HMACSHA1算法。
要将ASP.NET 4 Web应用程序配置为使用较旧的HMACSHA1算法,请将以下设置添加到Web.config文件的system.web部分:
<machineKey validation="SHA1"/>
答案 1 :(得分:2)
我遇到了完全相同的问题。我在3.5和4.0中都有我的Web应用程序,只有“旧”帐户在3.5实例上工作。
希望有人有答案!
更新:
我将passwordFormat更改为Clear,然后我就可以创建一个新用户并使用4.0应用程序登录。看起来密码被散列的方式发生了变化。
更新2:
我能够让其中一个“旧”帐户工作。通过对passwordFormat的上述更改,我将my_aspnet_membership中的PasswordFormat列更改为0并在同一个表中手动设置密码。虽然这是令人费解和混乱的,但它让帐户得到它。我将尝试运行密码重置,看看是否能修复损坏的帐户。