Hir*_*eth 2 asp.net login asp.net-identity-2
Visual Studio 2013,Asp.net Identity 2.1.0
我的登录页面(默认情况下由vs2013生成),
(1)有时我可以登录
(2)有时我无法登录.如果登录失败,他们会停留在登录页面上,但在网址末尾会显示"?ReturnUrl = ...".当时打开两个浏览器,一个是IE,另一个是Chrome,然后我发现Chrome成功,IE失败了.
当我成功登录时,我通过使用Fiddler在响应头上看到了这个:
Set-Cookie: .AspNet.ApplicationCookie=MlpChRy8gmGaxxIAo9EFbGrWf4J3mm...._BqMFEFHGuu8fiCNrVvy3LzygcNxlM7snKm9-F-zYrskb4; path=/; HttpOnly
Set-Cookie: .AspNet.ExternalCookie=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
Set-Cookie: .AspNet.TwoFactorCookie=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
Run Code Online (Sandbox Code Playgroud)
但是当我无法登录时,我看不到这些.
(3)然后其他时间,我得到这个例外:
system.Web.HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
Run Code Online (Sandbox Code Playgroud)
但我已经尝试过放入web.config; 我们的系统管理员也向我保证,我们在Web场的服务器上使用相同的机器密钥.
我从来没有在我的本地盒子上遇到任何上述问题,它只发生在我们的测试和测试版服务器上.它在beta服务器上经常发生; 从来没有发生在测试服务器上,但现在它一直在发生.另一位开发人员有时会在他的盒子上遇到问题(2).
这里有什么问题?我好几天都感到沮丧.我觉得这是IIS问题 - 因为它永远不会发生在我的机器上(另一个开发人员可以在他的盒子上有不同的IIS与我的相比).
在与开发团队和系统管理员一起检查Web服务器设置几天后,我们终于可以使用它了.
这是Asp.net Identity中的一个错误.
要解决此问题,请在对用户进行身份验证之前添加虚拟会话.所以在Page_Load()函数中Login.aspx.cs,添加如下内容:
Session["DummySession"] = "DummySession";
Run Code Online (Sandbox Code Playgroud)
所有问题都神奇地消失了.
原帖给了我们这个想法: ASP.NET_SessionId + OWIN Cookies不发送给浏览器