为什么存储在数据库中的ASP.Net成员资格证书不能在(1)Web应用程序和(2)计算机之间移植?
两种情况 -
我们备份生产数据库并将其还原到开发服务器。生产登录凭据都不适用于开发服务器,即使基础数据已从之前的生产时间恢复。
我们构建了一个新版本的应用程序(“v2”,让我们称之为),并将其安装在不同网站下的生产数据库中(与生产应用程序一起 - “v1”),但与之交谈相同的生产数据库。所有登录凭据都不适用于应用程序的v2,,即使它正在与同一数据库通信,因此具有完全相同的成员资格数据。
web.config文件中没有机器密钥。如果我把它排除在外,我认为它会从machine.config文件中冒出来,这意味着每台机器应该是相同的,这意味着两个webapps在同一台机器上与同一个数据库通信(上面的第二个场景)应该共享凭证,对吗?
我们还检查了数据库中的应用程序名称和ID,它们在计算机之间是相同的。
如果重置密码,一切正常(使用新密码)。但这意味着每个人都必须重置密码,这并不理想。
似乎不知何故,密码盐从数据库服务器变为数据库服务器,从Web应用程序变为Web应用程序。
修改
使用ASP.Net 4.5和System.Web.Security.SqlMembershipProvider 4.0。
另一个编辑:
我已验证PasswordFormat是“Hashed”。另外,我检查了两个数据库之间的Password和PasswordSalt字段。它们完全相同。
解决方案:
web.config中的哈希算法在两个应用程序之间设置不同。
答案 0 :(得分:-1)
两个webapps之间的散列算法不同。一个是使用默认的“SHA1”,另一个是显式设置为“HMACSHA512”。