2015-11-16 2 views
1

фонаInvalidate ASP.NET Идентичность 2,0 Войти без удаления приложения Cookie

Применение я работаю работает на несколько различных областях, весь обмен те же базу данных и процесс IIS. Пользователь может переключаться между этими доменами, щелкая ссылку, и при этом должен оставаться включенным. Для этого, когда нажата ссылка на домен домена коммутатора, я создаю запись в базе данных, которая содержит текущее значение cookie приложения Identity 2 (по умолчанию оно называется .AspNet.ApplicationCookie). Затем пользователь перенаправляется в новый домен, где значение 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; 
} 
+0

Является ли 'OnValidateIdentity' работой для исходного домена, на котором пользователь включен или нет? – Shoe

+0

Я на самом деле не уверен, что он должен делать, поэтому я не мог сказать ... это просто звучало так, как будто это было связано с тем, что я пытаюсь сделать. Как я могу проверить, что он работает? Он правильно вызван на основе validateInterval, но он не регистрирует пользователя или что-то еще. Я уменьшил validateInterval до 5 секунд, потому что 30 минут были бы слишком длинными, если я буду использовать его для регистрации пользователя на всех доменах. Думаю, теперь мне нужно выяснить, как сделать его недействительным, чтобы при вызове метода restoreateIdentityCallback он регистрировал пользователя, но я не уверен, как это сделать. – Sam

+0

Он использует SecurityStamp, чтобы узнать, требуется ли пользователю выйти из системы или нет. В противном случае он ничего не делает. Попытайтесь обновить пароль пользователя, чтобы узнать, не ударил ли он его. – Shoe

ответ

1

Я попытался раскомментировав и настройка OnValidateIdentity обратного вызова в конфигурации CookieAuthentication. Звучит так: может быть связано с тем, что я хочу сделать, но ничего не делает сам по себе.

Это срабатывает только при обновлении SecurityStamp. В противном случае он ничего не делает. Вы можете вручную вызвать его, позвонив по телефону

Смежные вопросы