Неправильный вход в ASP.NET Identity 2.0 без удаления файла cookie приложения
Фон
Приложение, над которым я работаю, работает в нескольких разных доменах, все используют одну и ту же базу данных и процесс IIS. Пользователь может переключаться между этими доменами, нажимая на ссылку, и при этом должен оставаться в системе. Для этого при щелчке ссылки домена переключателя я создаю запись в базе данных, которая содержит текущее значение файла cookie приложения Identity 2 (с именем .AspNet.ApplicationCookie
по умолчанию). Затем пользователь перенаправляется в новый домен, где значение cookie извлекается из базы данных и устанавливается в этом домене.
Этот метод работает, но проблема в том, что выход из одного домена не приводит к выходу пользователя из системы в других доменах, поскольку cookie удаляется только из того домена, в котором находится пользователь, когда он выходит из системы.
Вопрос
Есть ли способ сделать cookie-файл приложения недействительным при выходе из системы, чтобы при его чтении в доменах, где он еще существует (предположительно при попытке авторизации запроса), он игнорировался и удалялся из этого домена, требуя от пользователя входа в систему? снова?
Я пытался раскомментировать и настроить OnValidateIdentity
обратный вызов в пределах CookieAuthentication
конфигурации. Похоже, это может быть связано с тем, что я хочу сделать, но, похоже, ничего не делает само по себе.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/"),
CookieName = ApplicationCookieKey, // a string constant
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User, Guid>(
validateInterval: TimeSpan.FromSeconds(1),
getUserIdCallback: ((identity) => { return identity.GetUserId(); } ),
regenerateIdentityCallback: async (manager, user) => await manager.GenerateUserIdentityAsync(user))
},
});
GenerateUserIdentityAsync
метод:
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(User user)
{
// Note the authenticationType must match the one
// defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
1 ответ
Я попытался раскомментировать и настроить обратный вызов OnValidateIdentity в конфигурации CookieAuthentication. Похоже, это может быть связано с тем, что я хочу сделать, но, похоже, ничего не делает само по себе.
Это срабатывает только при обновлении SecurityStamp. В противном случае это ничего не делает. Вы можете вручную вызвать его, позвонив userManager.UpdateSecurityStamp()