【问题标题】:Session cookie still authenticates after app pool recycle应用程序池回收后会话 cookie 仍然进行身份验证
【发布时间】:2017-05-05 16:02:54
【问题描述】:

我的 ASP.NET MVC 网站在我认为不应该登录的情况下保持登录状态。

我的网络服务器是 IIS 7.5,应用程序池是 V4.0 集成,空闲超时设置为 20 分钟。

登录时,网站会保存一个身份验证 cookie,该 cookie 在“浏览会话结束时”到期(持久性设置为 false)。

如果我关闭浏览器(Chrome 或 FF),然后在服务器上的 IIS 上回收(或停止/启动)应用程序池,然后重新打开浏览器,那么会话 cookie 似乎仍然有效。

我知道 Firefox 和 Chrome 在您关闭浏览器时不会删除会话 cookie(因此您可以从上次中断的地方开始),但肯定会话不再存在于服务器上,因为应用程序池已回收?我没有将会话数据保存到数据库,也没有在我的 web.config 中设置机器 ID。

为什么这个 cookie 仍然有效?

编辑 1 - cookie 是如何设置的

Cookie 身份验证选项由 ConfigureAuth 设置(从我的 OWIN 启动类中的 Configuration 方法调用)。 Cookie 选项:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    CookieName = "MyCookieName",
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    SlidingExpiration = true,
    ExpireTimeSpan = TimeSpan.FromDays(7) // this only applies if persistent is true!
});

用户登录使用

await SignInManager.SignInAsync(user, isPersistent, rememberBrowser);

isPersistent 是通过登录表单上的“记住我”复选框设置的。如果选中此项,则 cookie 使用来自 CookieAuthenticationOptions 的 ExpireTimeSpan 过期。如果未选中,则 cookie 将在“浏览会话结束时”过期,这就是我的问题所在。

rememberBrowser 设置为 false - 这用于 2FA,在我的实现中未使用。

SignInAsync 是默认实现,它调用:

AuthenticationManager.SignIn(new AuthenticationProperties()
    {
      IsPersistent = isPersistent
    }, userIdentity);

...这又是默认实现。

AuthenticationManager 负责设置实际的 cookie(我相信)。

编辑 2 - machineKey?

进一步研究后,可能会将机器密钥存储到 cookie 中,从而允许它在池回收中进行身份验证。我没有在 web.config 中定义 machineKey,所以我不确定这是否正确。

【问题讨论】:

  • 当你回收内存被清除,所以技术上这是不可能的;)你确定你回收的是正确的应用程序(发生在我身上,愚蠢的我)
  • @Ravenix 是的,肯定会回收正确的应用程序池。这就是为什么我对如何保持登录状态感到困惑的原因。
  • 这只能意味着会话管理不在内存中。您是否绝对 100% 确定会话已保存在内存中?
  • 应用程序池使用默认设置(或多或少)当然没有改变内存管理。就 IIS 本身而言 - 我没有参与安装,但它可能是标准设置。我 99% 的会话都保存在内存中。我会尝试确认并消除 1% 的疑问。
  • 确认... 100% 来自马口(设置整个服务器的人)

标签: c# asp.net asp.net-mvc iis cookies


【解决方案1】:

IIS 使用在应用程序池回收中保持不变的机器密钥来识别应用程序。这存储在身份验证 cookie 中,以便可以跨应用程序池回收对用户进行身份验证。

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2021-04-27
    • 2014-05-19
    • 2014-07-09
    • 2012-03-26
    • 2019-10-28
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多