Il middleware ASP.NET identità che si sta utilizzando è un wraper intorno alcune chiamate a UseCookieAuthentication
che comprende il middleware cookie di autenticazione sul gasdotto. Questo può essere visto sul codice sorgente per le estensioni builder del middleware Identity here on GitHub. In tal caso, le opzioni necessarie per configurare il funzionamento dell'autenticazione cookie sottostante sono incapsulate su IdentityOptions
e configurate durante l'impostazione dell'input di dipendenza.
In effetti, guardando il codice sorgente ho collegato a si può vedere che il seguente viene eseguito quando si chiama app.UseIdentity()
:
var options = app.ApplicationServices.GetRequiredService<IOptions<IdentityOptions>>().Value;
app.UseCookieAuthentication(options.Cookies.ExternalCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorRememberMeCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorUserIdCookie);
app.UseCookieAuthentication(options.Cookies.ApplicationCookie);
return app;
Per impostare la classe IdentityOptions
, il metodo AddIdentity<TUser, TRole>
ha una versione di overload che permette di configurare le opzioni con una lambda. Quindi devi solo passare un lambda per configurare le opzioni. In tal caso, è sufficiente accedere alle proprietà Cookies
della classe di opzioni e configurare ApplicationCookie
come desiderato. Per modificare l'intervallo di tempo si fa qualcosa di simile
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
});
EDIT: La proprietà ExpireTimeSpan
viene utilizzata solo se al momento della chiamata HttpContext.Authentication.SignInAsync
passiamo in un'istanza di AuthenticationProperties
con IsPersistent
set per true
.
Provando solo con il middleware di autenticazione dei cookie si scopre che funziona: se effettuiamo l'accesso senza questa opzione, otteniamo un cookie che dura per la sessione, se inviamo questo insieme otteniamo un cookie che dura quanto abbiamo configurato durante la configurazione del middleware.
Con ASP.NET Identity il modo per fare è passare il parametro isPersistent
del PasswordSignInAsync
con il valore true
. Si tratta di una chiamata allo SignInAsync
dello HttpContext
passando allo AuthenticationProperties
con lo IsPersistent
impostato su true. La chiamata finisce per essere qualcosa di simile:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
Qualora il RememberMe
è quello che consente di configurare se stiamo impostando IsPersistent
true o false.
Grazie, usando questo sono in grado di cambiare il nome del cookie usando questo approccio, ma anche se imposto ExpireTimeSpan la durata del cookie auth è impostata su 'Session'. Qualche idea sul perché? Questo è il mio Startup.cs: https://github.com/severisv/MyTeam/blob/master/src/MyTeam/Startup.cs Ho provato a disabilitare Facebook-auth. Non sto usando https. – severin
@fiskeboss Ho aggiunto una modifica su ciò che ho scoperto riguardo a questo argomento. – user1620696
Ah, certo, grazie! – severin