在我的ASP.NET Core MVC应用程序中,身份验证cookie的生命周期设置为“Session”,因此它一直持续到关闭浏览器.
我使用MVC的默认认证方案:
我使用MVC的默认认证方案:
app.UseIdentity();
如何延长Cookie的使用寿命?
解决方法
您正在使用的ASP.NET身份中间件是对UseCookieAuthentication的一些调用,包括管道上的Cookie身份验证中间件.这可以在Identity中间件
here on GitHub的构建器扩展的源代码中看到.在这种情况下,配置底层Cookie身份验证应如何工作所需的选项将封装在IdentityOptions上,并在设置依赖注入时进行配置.
实际上,查看我链接到的源代码,可以看到当您调用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;
要设置IdentityOptions类,AddIdentity< TUser,TRole>方法有一个重载版本,允许使用一个lambda配置选项.因此,您只需传递一个lambda来配置选项.在这种情况下,您只需访问选项类的Cookie属性,并根据需要配置ApplicationCookie.要改变你做的事情的时间间隔
services.AddIdentity<ApplicationUser,IdentityRole>(options => { options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1); });
编辑:ExpireTimeSpan属性仅在调用HttpContext.Authentication.SignInAsync时才会使用,我们将IsProperties设置为true的AuthenticationProperties实例中传递.
尝试使用Cookie认证中间件,事实证明这是有效的:如果我们刚刚登录没有这个选项,我们得到一个持续会话的cookie,如果我们一起发送,我们得到一个cookie,持续我们在配置时设置中间件
使用ASP.NET身份的方法是将值为true的PasswordSignInAsync的参数传递给参数.这最终是调用SignInAsync的HttpContext传递AuthenticationProperties中的IsPersistent设置为true.该通话最终是这样的:
var result = await _signInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,lockoutOnFailure: false);
如果我们将IsPersistent设置为true或false,则RememberMe是哪些配置.