我正在开发一个MVC3网站,但在使用ASP.NET Membership时遇到了一个令人困惑的问题。我使用的是连接到SQL Azure数据库的System.Web.Providers 1.0.1。
目前情况是,在计算模拟器下可以成功登录的用户名/密码,在Azure生产环境下却不能登录。我可以看到它正在使用正确的数据库,因为成员身份验证数据库中的 Failed Password Attempts 计数器正在更新。
我正在开发一个MVC3网站,但在使用ASP.NET Membership时遇到了一个令人困惑的问题。我使用的是连接到SQL Azure数据库的System.Web.Providers 1.0.1。
目前情况是,在计算模拟器下可以成功登录的用户名/密码,在Azure生产环境下却不能登录。我可以看到它正在使用正确的数据库,因为成员身份验证数据库中的 Failed Password Attempts 计数器正在更新。
通过阅读David Hoerster的这篇文章,我找到了问题所在。问题在于Azure上的默认密码哈希算法与.NET 4.0默认设置不同。Azure上默认设置为SHA1,而HMACSHA256是4.0的新标准设置。
可以通过在web.config中显式指定哈希类型来解决此问题。如果您决定使用像HMACSHA256这样的方法,则确保还指定了机器密钥--否则,由于自动生成的机器密钥会因服务器不同而不同,您将遇到类似的问题。
您需要更改的配置元素位于<system.web>下方的<machinekey>中:
<machineKey decryptionKey="PUT_DECRYPTION_KEY_HERE"
validationKey="PUT_VALIDATION_KEY_HERE"
decryption="AES"
validation="HMACSHA256" />
您可以使用 此机器密钥生成器 以正确格式生成随机密钥。