ASP.Net OWIN设置Cookie,但用户立即注销

时间:2019-07-17 16:40:45

标签: authentication cookies asp.net

这个问题我已经有几个月了。这个问题是零星的,很难重现,但是我设法找到了某种一致的方法。我正在调试,看到它应该重定向到/ home / index时,它立即转到/ account / logoff。如果我在本地测试,则可以在首次登录时正常工作,然后如果使用其他帐户,它将失败。在看到一些与它们相关的帖子后,我设置了CookieName和CookieSecure。但这似乎没有帮助。

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            CookieManager = new SystemWebChunkingCookieManager(),
            CookieName = "NewImprovedCookieName",
            CookieSecure = CookieSecureOption.SameAsRequest,
            LoginPath = new PathString("/Account/Login"),
            LogoutPath = new PathString("/Account/LogOff"),
            Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity =
                        SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                            validateInterval: TimeSpan.FromMinutes(30),
                            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
        });

在此最后一行代码之后立即发生注销。

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    return RedirectToAction("Index", "Home");
}

我尝试更新项目中的所有内容,以查看它是否在某个时间点已修复(这是一个旧项目),但是似乎没有任何帮助。

是否可以解决此问题,还是应该考虑迁移到.Net Core?

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最好的解决方案,但是我确实找到了一个可行的解决方案。我注意到注销后SessionID仍然存在。我添加了代码以删除放弃的会话并更改会话ID,它现在似乎正在工作。

    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        Session.Clear();
        Session.Abandon();
        Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
        return RedirectToAction("Index", "Home");
    }