ASP.NET MVC de base: paramétrage de l'expiration du cookie d'identité
dans mon ASP.NET application MVC de base la durée de vie du cookie d'authentification est définie à 'Session', de sorte qu'il dure jusqu'à ce que je ferme le navigateur. J'utilise le schéma d'authentification par défaut pour MVC:
app.UseIdentity();
Comment puis-je prolonger la durée de vie du cookie?
6 réponses
le ASP.NET L'middleware D'identité que vous utilisez est un wraper autour de certains appels à UseCookieAuthentication
qui inclut l'middleware D'authentification Cookie sur le pipeline. Cela peut être vu sur le code source pour les extensions builder de l'middleware D'identité ici sur GitHub. Dans ce cas, les options nécessaires pour configurer le fonctionnement de L'authentification du Cookie sous-jacent sont encapsulées sur le IdentityOptions
et configuré lors de la configuration de la dépendance injection.
en effet, en regardant le code source auquel j'ai fait référence, vous pouvez voir que ce qui suit est exécuté lorsque vous appelez 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;
installation IdentityOptions
classe AddIdentity<TUser, TRole>
méthode a une version surchargée qui permet de configurer les options avec un lambda. Il suffit donc de passer dans une lambda pour configurer les options. Dans ce cas, vous accédez simplement à la Cookies
propriétés de la classe d'options et configurer le ApplicationCookie
comme souhaité. Pour changer l'heure durée de vous faire quelque chose comme
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
});
EDIT:ExpireTimeSpan
la propriété n'est utilisée que si HttpContext.Authentication.SignInAsync
nous passons dans une instance de AuthenticationProperties
IsPersistent
true
.
essayer juste avec L'Middleware D'authentification de Cookie il s'avère que cela fonctionne: si nous nous connectons simplement sans cette option, nous obtenons un cookie qui dure pour la session, si nous l'envoyons ensemble nous obtenons un cookie qui dure ce que nous configurons lors de la configuration du intergiciel.
avec ASP.NET Identity la façon de faire est de passer le paramètre isPersistent
PasswordSignInAsync
valeur true
. Cela finit par être un appel à SignInAsync
HttpContext
passage dans le AuthenticationProperties
IsPersistent
mis à true. L'appel finit par être quelque chose comme:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
RememberMe
est ce que configure si nous sommes paramètre IsPersistent
à vrai ou faux.
Il y a une réponse pour la version 2.0 mais ça n'a pas marché pour moi. J'ai eu à faire:
services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(30);
});
La valeur par défaut est de 14 jours.
app.UseIdentity().UseCookieAuthentication(
new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(1)
}
);
Pour une raison quelconque, j'ai eu le problème lors de l'utilisation de SignInAsync([..], true)
le cookie n'a jamais été être affiché dans le navigateur (et correctement la connexion a échoué):
alors, j'ai essayé d'ajouter la différence de fuseau horaire UTC dans la durée de ExpireTimeSpan
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
// add TimeSpan with 5 minutes plus timezone difference from Utc time
o.Cookies.ApplicationCookie.ExpireTimeSpan = DateTime.Now.Subtract(DateTime.UtcNow).Add( TimeSpan.FromMinutes(5) );
});
Voila! Il a fonctionné et le cookie est affiché avec +5min expiration seulement dans le navigateur.
PingBack à github.com https://github.com/aspnet/Identity/issues/766#issuecomment-253237576
pour ASP.NET Core 2.0
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "CookieName";
options.Cookie.Expiration = TimeSpan.FromDays(2);
});
dans ASP.NET Core 2.0 utiliser la propriété ExpireTimeSpan au lieu de Cookie.Expiration.
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "CookieName";
options.ExpireTimeSpan = TimeSpan.FromHours(24);
options.SlidingExpiration = true;
});
docs:
Cookie.Expiration: Obtient ou définit la durée de vie d'un cookie. Actuellement, cette option no-ops et deviendra obsolète en ASP.NET noyau 2.1+. Utilisez L'option ExpireTimeSpan pour définir l'expiration du cookie.