验证cookie总是在validateInterval之后使用CookieAuthenticationProvider OnValidateIdentity删除

时间:2019-03-14 16:31:42

标签: .net authentication cookies owin cookie-authentication

背景 如果愿意,跳过

我正在使用.NET(4.5.2)Web应用程序,该应用程序使用由OWIN中间件提供的CookieAuthentication和OpenIdConnectAuthentication(与Azure AD集成)。

来自客户端的渗透测试突出表明,即使在用户注销后,该cookie仍然是授权的,因此可以用来提交请求。这是预期的行为,但我需要找到解决方法。

我正在尝试在此related post中实施解决方法,即使用SecurityStampValidator.OnValidateIdentity方法和调用UserManager.UpdateSecurityStampAsync来使注销时有效地使cookie无效。

代码 可以根据要求提供更多信息

我在CookieAuthenticationProvider方法中添加了OnValidateIdentityConfigureAuth

app.UseCookieAuthentication(new CookieAuthenticationOptions {
  CookieName = "whatever",
  Provider = new CookieAuthenticationProvider
  {
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(1),
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)
    ),
  },
});

我还按照this helpful postUseTokenLifetime = false添加到了OpenIdConnectAuthenticationOptions中。

我计划在退出过程中添加UserManager.UpdateSecurityStampAsync(User.Identity.GetUserId());,但是我还没有进行测试。

如果相关,这是我登录的发起人:

Request.GetOwinContext().Authentication.Challenge(
  new AuthenticationProperties { RedirectUri = Request.ApplicationPath },
  OpenIdConnectAuthenticationDefaults.AuthenticationType);

我的期望

由于不应该更改SecurityStamp,因此validateInterval(1分钟)后,所有内容都应继续正常运行(用户现有的cookie仍然有效)。

结果

登录后1分钟后的第一个请求导致返回以下set-cookie响应标头:

  

whatever =;路径= /; expires =星期四,格林尼治标准时间1970年1月1日00:00:00

因此,用户的cookie被删除并被注销。

问题

我的期望是正确的,还是我误解了validateInterval?有什么方法可以让我按上述要求工作?创建初始cookie之后,是否有可能在登录过程中某个地方更改了SecurityStamp,而我却没有意识到?

0 个答案:

没有答案