Ho un'applicazione ASP.NET MVC 5
che utilizza ASP.NET Identity 2.1.0
per l'autenticazione dell'utente.
Tutto ha funzionato bene in passato, ma ora ho scoperto che le sessioni utente persistenti non funzionano più. Non posso dire quale cambiamento ha rotto questo, ma ha funzionato quando ho implementato Identity (convertito l'applicazione dal SimpleMembership
) e questa è la mia logica ho in questo momento:IsPersistent non funziona - Cookie valido solo per la sessione corrente
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
è la mia ApplicationSignInManager
sulla base di SignInManager<ApplicationUser, int>
e model.RememberMe
è true
.
E la mia messa a punto:
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);
Tutto funziona bene, tranne persistente le sessioni utente. Ho controllato i cookie restituiti dal mio server e lo .AspNet.ApplicationCookie
è sempre restituito come "valido per la sessione corrente" invece di una data futura. Quindi, quando chiudo e riapro il browser devo accedere nuovamente ...
Qualcuno ha un'idea del motivo per cui questo non funziona (più)?
PS: Ho sovrascritto SignInAsync
nel mio ApplicationSignInManager
perché faccio un po 'di logica personalizzata lì, ma ho anche controllato con il debugger e per il seguente invito:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
è true
, quindi dovrebbe creare un cookie persistente.
Sospetto che 'validateInterval: TimeSpan.FromMinutes (0)' possa causare questo. Perché su ogni richiesta rigenera cookie e ne imposta uno nuovo. Prova a impostare 'validateInterval' su qualcosa di più di 0 e vedi se funziona. – trailmax
@trailmax: Grazie, era così.Le modifiche sono state apportate con V 2.1? Perché ha sicuramente funzionato all'inizio (con V 2.0). In ogni caso: posta questo come risposta e io lo accetterò. Ora ho bisogno di trovare una soluzione, poiché ho bisogno (a causa di SSO) di convalida su ogni richiesta. – ChrFin