Фон пропустите, если хотите
Я работаю над веб-приложением .NET (4.5.2), которое использует CookieAuthentication и OpenIdConnectAuthentication (интегрировано с Azure AD).) предоставлено промежуточным программным обеспечением OWIN.
Тест на проникновение от клиента показал, что даже после того, как пользователь вышел из системы, cookie все еще авторизован и, следовательно, может использоваться для отправки запросов.Это ожидаемое поведение, но мне нужно найти способ обойти его.
Я пытаюсь реализовать обходной путь в этой связанной статье , то есть использовать метод SecurityStampValidator.OnValidateIdentity
вместе с вызовом UserManager.UpdateSecurityStampAsync
для эффективного аннулирования куки при выходе.
Код может предоставить дополнительную информацию по запросу, если будет полезно
Я добавил CookieAuthenticationProvider
с 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 = Чт, 01 января 1970 г., 00:00:00 по Гринвичу
И поэтому cookie пользователя удаляется, и он выходит из системы.
Вопрос (ы))
Действительны ли мои ожидания или я неправильно понял validateInterval
?Могу ли я заставить вышесказанное работать так, как я хочу?Возможно ли, что SecurityStamp изменяется где-то в процессе входа в систему, и я не понимаю, после того, как начальный файл cookie создан?