asp.net – 在owin MVC5中正确关闭会话

在我们的Web应用程序,即MVC5,与Owin,当我们注销时,我们有这样的代码:

    public ActionResult LogOut()
    {
        using (MiniProfiler.Current.Step("AccountController.LogOut"))
        {
            Session.Clear();
            Session.Abandon();
            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);

            Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetNoStore();  

            return RedirectToDefault();
        }
    }

Startaup.Auth看起来像这样:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            CookieName = ".<cookiename>",
            LoginPath = new PathString("/Account/LogOn")
        });

我们验证了,退出后,客户端(在浏览器中)的cookie被删除.但后来我们得到第三方的安全评估说:

“当用户退出Web应用程序时,他们的会话应该在服务器端和客户端无效.
在Workforce应用程序中,当用户注销时,服务器不会在服务器端终止用户的cookie.
注销后,用户仍然可以利用旧的cookie值来访问内部页面和信息.
在共享计算机环境中,这可能允许未经授权的用户使用先前用户的会话访问内部应用程序页面和数据.建议:当用户注销应用程序时,服务器应终止客户端和服务器端的用户会话.应删除用户浏览器的HTTP cookie,并删除服务器上的会话和关联的会话变量.有关更多信息,请参阅OWASP身份验证备忘单的会话管理部分:https://www.owasp.org/index.php/Authentication_Cheat_Sheet

基本上问题是如果复制授权cookie的原因是用户登录,然后在注销后手动应用,则该站点接受登录.当我对我的银行尝试这个伎俩时,它没有用.因此,本报告背后有一些优点.

知道我们如何解决这个问题吗?

最佳答案 经过对团队的一些调查,我们得出以下结论它是如何工作的.

有问题的cookie不是与会话相关的cookie.它们是具有加密声明的cookie.所以,我们实际观察到的是在服务器上正确关闭会话.但是,如果这些“身份验证”cookie附加到新请求,并且身份验证尚未过期,则Web服务器只会创建新会话.

指向我们答案的非常有用的链接是:http://forums.asp.net/t/1988295.aspx?Session+Authentication+not+removed+server+side+after+logout

点赞