У меня есть приложение ASP.NET MVC 5
с использованием ASP.NET Identity 2.1.0
для аутентификации пользователей.
Все прошло отлично, но теперь я узнал, что продолжающиеся сеансы пользователя больше не работают. Я не могу сказать, что изменение сломало, но он работал, когда я реализовал Идентичность (преобразованное приложение из SimpleMembership
), и это моя логика у меня есть на данный момент:IsPersistent не работает - Cookie действительна только для текущей сессии
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
это мой ApplicationSignInManager
на основе SignInManager<ApplicationUser, int>
и model.RememberMe
есть true
.
И моя установка:
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = ApplicationCookieIdentityValidator.OnValidateIdentity(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
Все работает отлично, за исключением сохраняющихся сессий пользователей. Я проверил файлы cookie, возвращенные моим сервером, и .AspNet.ApplicationCookie
всегда возвращается как «действительный для текущего сеанса» вместо какой-либо даты в будущем. Поэтому, когда я закрываю и снова открываю браузер, мне нужно снова войти в систему ...
У кого-нибудь есть идея, почему это не работает (больше)?
PS: Я перекрываться SignInAsync
в моем ApplicationSignInManager
, потому что я сделать некоторые пользовательскую логику там, но я даже проверил с помощью отладчика и для следующего вызова:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
является true
, поэтому он должен создать постоянное печенье.
Я подозреваю, что 'validateInterval: TimeSpan.FromMinutes (0)' может вызвать это. Потому что по каждому запросу он регенерирует файл cookie и устанавливает новый. Попробуйте установить 'validateInterval' на что-то большее, чем 0, и посмотрите, работает ли это. – trailmax
@trailmax: Спасибо, вот и все.Были ли изменения с V 2.1? Потому что он определенно работал в начале (с V 2.0). В любом случае: опубликуйте это как ответ, и я соглашусь с ним. Теперь я должен найти это, так как мне нужно (из-за SSO) валидации по каждому запросу. – ChrFin