【问题标题】:Cookie not expiring per StartUp.cs settingsCookie 不会根据 StartUp.cs 设置过期
【发布时间】:2019-11-26 03:42:48
【问题描述】:

我在 2 天的时间里尝试了很多解决方案,但仍然无法让它发挥作用。我想要的是用户cookie在设定的时间后过期

例如用户 A 登录并进入主页,用户 A 去午休。用户 A 返回并单击导航栏并被重定向到登录页面。

我已经尝试了 AddAuthentication()AddSession()AddCookie() 选项中的所有选项,所有选项都有我选择的 ExpireTimeSpanCookie.Expiration。似乎没有任何效果。该项目使用 ASP.NET Identity,我知道应该在 cookie 选项之前调用此服务。请在下方查看我当前的StartUp.cs,这是我尝试的最后一件事:

Startup.cs

public class Startup
    {
        public IConfiguration Configuration { get; }
        public IContainer ApplicationContainer { get; private set; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => false;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddIdentity<ApplicationUser, IdentityRole>(config =>
                {
                    config.SignIn.RequireConfirmedEmail = true;
                })
                .AddDefaultTokenProviders()
                .AddEntityFrameworkStores<ApplicationDbContext>();

            //other services e.g. interfaces etc.
            services.AddAuthentication().AddCookie(options =>
            {
                options.Cookie.HttpOnly = true;
                options.Cookie.Expiration = TimeSpan.FromSeconds(60);
                options.LoginPath = "/Account/Login";
                options.LogoutPath = "/Account/Logout";
                options.AccessDeniedPath = "/AccessDenied";
                options.ExpireTimeSpan = TimeSpan.FromSeconds(5);
                options.SlidingExpiration = true;
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            //services.AddSession();

            var containerBuilder = new ContainerBuilder();
            containerBuilder.Populate(services);
            this.ApplicationContainer = containerBuilder.Build();
            var serviceProvider = new AutofacServiceProvider(this.ApplicationContainer);

            return serviceProvider;
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.ConfigureCustomExceptionMiddleware();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseAuthentication();
            //app.UseSession();
            app.UseMvc();
        }
    }

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc asp.net-core-identity


    【解决方案1】:

    以下代码不会影响身份 cookie:

    services.AddAuthentication().AddCookie(options => ...);
    

    相反,它添加了一个新的基于 cookie 的身份验证方案,名为 Cookies,并配置了 。对于所有标准的身份设置,此方案未使用,因此对其配置的任何更改都将无效。

    Identity 使用的主要身份验证方案名为Identity.Application,并在您的示例中注册在AddIdentity&lt;TUser, TRole&gt; 方法中。这可以使用ConfigureApplicationCookie 进行配置。这是一个例子:

    services.ConfigureApplicationCookie(options => ...);
    

    设置好之后,cookie 选项将按预期受到影响,但为了设置具有非会话生存期的 cookie,您还需要在对 PasswordSignInAsync 的调用中将 isPersistent 设置为 true .这是一个例子:

    await signInManager.PasswordSignInAsync(
        someUser, somePassword, isPersistent: true, lockoutOnFailure: someBool);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2014-04-17
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 2011-09-17
      • 2014-11-27
      相关资源
      最近更新 更多