【发布时间】:2013-12-09 19:56:41
【问题描述】:
为什么 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 中的哈希算法在两个应用之间设置不同。
【问题讨论】:
-
.Net 4.5。 System.Web.Security.SqlMembershipProvider,v4.0
-
您能否将其编辑到您的问题中。这是相关的!
标签: asp.net asp.net-membership membership-provider