如果你喜欢,背景跳过
我正在开发一个使用 OWIN 中间件提供的 CookieAuthentication 和 OpenIdConnectAuthentication(与 Azure AD 集成)的 .NET (4.5.2) Web 应用程序。
来自客户端的渗透测试强调,即使在用户退出后,cookie 仍然是授权的,因此可以用于提交请求。这是预期的行为,但我需要找到解决方法。
我正在尝试在此相关帖子中实施解决方法,即使用该SecurityStampValidator.OnValidateIdentity
方法和调用UserManager.UpdateSecurityStampAsync
以在注销时有效地使 cookie 无效。
如果有帮助,代码 可以根据要求提供更多信息
我在我的方法中添加了CookieAuthenticationProvider
with :OnValidateIdentity
ConfigureAuth
app.UseCookieAuthentication(new CookieAuthenticationOptions {
CookieName = "whatever",
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(1),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)
),
},
});
UseTokenLifetime = 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 响应标头:
随便=; 路径=/; expires=周四,1970 年 1 月 1 日 00:00:00 GMT
因此,用户的 cookie 被删除并且他们被注销。
问题)
我的期望是有效的,还是我误解了validateInterval
?有没有办法让我按照我想要的方式工作?在创建初始 cookie 之后,是否有可能在我没有意识到的情况下在登录过程中的某个地方更改了 SecurityStamp?