我在SQL1上使用aspnet_regsql.exe使用ASP.NET Membership Schema(通过windows服务器托管),我在SQL2(本地实例)上恢复了该sql数据库的备份。
但是,当我的连接字符串指向SQL2时,身份验证失败@
Membership.ValidateUser
返回false,但是当我将连接字符串更改回SQL1时,它返回true,这发生在相同的代码库上。我不确定是什么导致这种情况,我尝试了以下
有什么想法吗?
答案 0 :(得分:1)
加密密码是从机器密钥的哈希值创建的(在web.config中,如果这是同一个Web服务器,可能是红鲱鱼?)+实际的密码+随机生成的密码盐。
尝试运行sql跟踪来捕获已发出的命令并尝试在QA中运行它们。这将显示哈希不匹配或简单的身份验证失败。
也许您应该强制机器密钥,查找machine.config并将其从那里复制到本地web.config。
我过去的痛苦历史说如果你还在摸不着头脑 - 去找一个像样的反编译器(ILSpy)并将你的调试器附加到dll上,然后像你自己的代码那样单步执行。
答案 1 :(得分:1)
如果密码存储为哈希,则不使用机器密钥。
但是,密码存储为加密,它使用机器密钥。
如果它们是混合的并且未在web.config中明确设置机器密钥,则只能使用此方法从旧服务器检索机器密钥 -
How to read Auto Generated machine key?
经验法则是要在web.config中包含机器密钥。 如果您未在web.config中设置机密钥,我们将了解Azure自动创建机器密钥的难度。