我正在尝试将我在.Net 4中创建的会员数据库移动到新创建的.Net 4.5会员数据库。 .Net 4.5数据库具有与旧.Net 4数据库不同的模式。 所以我创建了一个新的4.5成员资格数据库,并尝试重新创建用户。
我从旧数据库中选择我的用户,然后使用Membership.CreateUser()在新成员资格数据库中重新创建这些用户。 由于我还需要他们的密码,我使用SQL UPDATE语句将Membership表中的Password和PasswordSalt字段设置为与旧数据库中的相同值。
任何新用户都可以在没有任何问题的情况下登录,但是如上所述,用户无法登录(“您的登录尝试未成功。请再试一次。”)
我可以看到“FailedPasswordAttemptCount”随着尝试登录而增加。所以它正在找到用户......问题必须是密码或密码的解密。
我做错了什么,试图复制密码? 这两个数据库都在同一台机器上......密码和称号密封条应该足以解密它吗?
答案 0 :(得分:1)
首先,您的情况下的密码不会被解密,用户提交的密码会被散列,并且会与存储在数据库中的散列进行比较。散列通常可以在机器密钥上运行,但可以在Web.Config
和不同版本的IIS中进行更改。
您可以尝试制作原始数据库的副本,然后针对它运行.net 4.5 ASPNET_REGSQL以查看它是否会正确更新它,我怀疑它会,但它值得一试。
我要做的第一件事就是查看Web.Config
部分的Providers
文件,并验证它与旧项目版本的相同。这决定了密码格式,如果幸运的话,这将是问题,但我怀疑它是。
您也可以(取决于数据库中有多少用户)通过某个程序或网站解密其密码。 This已过时但可能有所帮助。如果可以检索其纯文本密码,您可以像这样重新创建用户。
我找不到任何说哈希过程从版本4.0更改为4.5的内容,但如果确实如此,则可能需要定义自定义哈希算法。基本上,您需要以.net 4.0的方式重新创建哈希。
如果第一次验证失败,您还可以尝试对密码进行第二次手动验证。类似于this。
PasswordFormat值在。的providers部分中指定 ASP.NET应用程序的Web.config文件。
默认情况下,加密或散列密码已加密或散列 基于您的machineKey元素中提供的信息 组态。请注意,如果为其指定了3DES值 验证属性,或者如果未指定值,则使用散列密码 将使用SHA1算法进行哈希处理。
可以使用hashAlgorithmType定义自定义哈希算法 成员资格配置元素的属性。如果你选择 加密,默认密码加密使用AES。你可以改变 加密算法通过设置解密属性 machineKey配置元素。如果您正在加密密码,那么 必须为其中的decryptionKey属性提供显式值 machineKey元素。的默认值为AutoGenerate 使用加密时不支持decryptionKey属性 ASP.NET成员资格的密码。