Mam aplikację ASP.NET MVC 5
używającą ASP.NET Identity 2.1.0
do uwierzytelniania użytkownika.
W przeszłości wszystko działało dobrze, ale teraz dowiedziałem się, że nie działa już sesja użytkownika. Nie mogę powiedzieć, co zmiana złamał, ale to działało kiedy realizowane Tożsamość (przeliczona aplikację z SimpleMembership
) i to jest moja logika nie mam w tej chwili:IsPersistent nie działa - plik cookie ważny tylko dla bieżącej sesji
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
jest mój ApplicationSignInManager
podstawie SignInManager<ApplicationUser, int>
i model.RememberMe
to true
.
A moja konfiguracja:
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);
Wszystko działa poprawnie, oprócz utrzymujących sesji użytkownika. Sprawdziłem pliki cookie zwrócone przez mój serwer, a .AspNet.ApplicationCookie
jest zawsze zwracany jako "ważny dla bieżącej sesji" zamiast jakiejś daty w przyszłości. Więc po zamknięciu i ponownym otwarciu przeglądarki muszę się ponownie zalogować ...
Czy ktoś ma pomysł, dlaczego to nie działa (już)?
PS: Mam nadpisane SignInAsync
w moim ApplicationSignInManager
bo mam tam jakąś niestandardową logikę, ale nawet sprawdzane debugger oraz w następnym rozmowy:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
jest true
, więc należy go utworzyć persisten cookie.
Podejrzeń "validateInterval: TimeSpan.FromMinutes (0)" może to spowodować. Ponieważ na każde żądanie regeneruje plik cookie i ustawia nowy. Spróbuj ustawić 'validateInterval' na coś więcej niż 0 i sprawdź, czy to działa. – trailmax
@trailmax: Dzięki, to było to.Czy to zmiany przy V 2.1? Ponieważ na pewno działało na początku (z V 2.0). W każdym razie: Opublikuj to jako odpowiedź, a ja to zaakceptuję. Teraz muszę znaleźć się w pobliżu, ponieważ potrzebuję (z powodu SSO) walidacji na każde żądanie. – ChrFin