OnValidateIdentity отключает опцию MVC OWIN запомнить меня

#asp.net-mvc-5 #asp.net-identity #owin

#asp.net-mvc-5 #asp.net-identity #owin

Вопрос:

Когда я активирую функцию OWIN logout-everywhere с помощью меток безопасности и использую OnValidateIdentity -Обратный CookieAuthenticationProvider вызов с SecurityStampValidator -class, пользователь выходит из системы каждый раз, когда он закрывает браузер.

 provider.OnValidateIdentity =
    SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
        System.TimeSpan.FromSeconds(10),(manager, user) => {
            return user.GenerateUserIdentityAsync(manager);                                                       
        });
  

Однако, когда я сам выполняю настройку (поиск и сравнение меток безопасности, отклонение или обновление идентификатора) в OnValidateIdentity -callback , кажется, все работает нормально.

Это известная ошибка, или я что-то пропустил? Или есть хорошая документация об CookieAuthenticationProvider использовании и использовании OnValidateIdentity ?
Поиск в Google показывает мне только несколько простых примеров, но не дает дальнейшего понимания.

Дополнительная информация

  • Я использую собственную реализацию UserStorage, которая сохраняет все данные в базе данных
  • Я отметил, что каждый запрос страницы вызывает два раза GetSecurityStampAsync хранилища пользователей, поэтому, когда я использую свою реализацию, выполняется только один вызов.
  • Установленная версия удостоверения 2.0.1

Ответ №1:

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

 context.OwinContext.Authentication.SignIn(context.Properties, identity);
  

Ответ №2:

Это решается в ASP.NET Идентификация 2.2. См. https://aspnetidentity.codeplex.com/workitem/2319

Ответ №3:

Я нашел следующий код при разборке SecurityStampValidator.OnValidateIdentity :

 // .. some other code
// ...
ClaimsIdentity claimsIdentity = await regenerateIdentityCallback(userManager, tUser);
if (claimsIdentity != null){
context.get_OwinContext().get_Authentication().SignIn(new ClaimsIdentity[]
    {
       claimsIdentity
    });
}
  

Мне кажется, что SignIn операция — является неполной и должна установить опцию запомнить меня? Поэтому я предполагаю, что реализация SecurityStampValidator дает ошибки.

Комментарии:

1. Мои исследования и отладка показывают, что ‘Ispersistent’ добавляется в качестве требования к идентификатору пользователя.