Asp.NET Identity停止使用Chrome

时间:2016-02-05 20:19:34

标签: asp.net google-chrome cookies asp.net-identity

由于某些未知原因,我无法再在Chrome上登录自己的应用程序。

这就是我登录的方式:

    [AllowAnonymous]
    [HttpPost]
    public async Task<ActionResult> Login(LoginModel model)
    {
        if (User.Identity.IsAuthenticated)
            return RedirectToAction("Index", "Home");

        if (!ModelState.IsValid)
            return View();

        var status = await signInManager.PasswordSignInAsync(model.Login, model.Password, true, false);
        switch (status)
        {
            case Microsoft.AspNet.Identity.Owin.SignInStatus.Success:
                {
                    int userId = User.Identity.GetUserId<int>();
                    if (userManager.IsFirstLogin(userId))
                    {
                        return RedirectToAction("Declaration", "Home", new { returnUrl = model.ReturnUrl });
                    }

                    return RedirectToLocal(model.ReturnUrl);
                }
            default:
                return View();
        }
    }

我调试了代码并且PasswordSignInAsync成功,但Chrome没有显示为该页面设置的Cookie。实际上,重定向到操作,标记为[授权]属性再次重定向到登录页面。

我在IE上测试了网站,一切正常,我可以登录和注销,并正确设置了cookie。

如果我能提供更详细的信息,请告诉我。

修改:更多详情

我一直在测试一个应用程序,它是对日期时间敏感的(在特定日期之后停止显示)。我将系统时间更改为2016年8月1日,登录后再切换回现在。那时候一切都停止了。

奇怪的是,当我切换回未来的时间时,我可以再次登录并正确设置会话cookie。但是当我回到“现在”时,我无法再次登录。

2 个答案:

答案 0 :(得分:0)

仍然需要调查发生了什么,但是对我来说,“解决办法”是更改Auth cookie的名称。

在Startup.Auth.cs中:

List<Action> sequentialMethods = new List<Action>()
{
    SomeMethod1,
    SomeMethod2,
    () => ExecuteParallelAsync().Wait(),
    SomeMethod3,
    SomeMethod4
};

我怀疑这样一个事实,我的计算机上有很多可用于开发的网站,并且所有网站都具有相同的默认Cookie名称。

答案 1 :(得分:0)

我的应用程序中有同样的问题,但在我的情况下,我的应用程序是在 iframe 中打开的,并且当登录时 cookie 未设置到浏览器中,因为发生了错误,并且超过 80 的 chrome 版本更改了那里的 cookie 策略。我们需要在 web.config 文件中设置这个代码

<httpCookies sameSite="None" requireSSL="true" />