#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’ добавляется в качестве требования к идентификатору пользователя.