Неправильный вход в 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()

Другие вопросы по тегам