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

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

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

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

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

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

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

3 ответа

Решение

Это решено в ASP.NET Identity 2.2. См. https://aspnetidentity.codeplex.com/workitem/2319

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

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

Я нашел следующий код в разборке 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 содержит ошибки.

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