Не удается войти в систему после добавления файлов cookie настройки приложения

#asp.net #.net #asp.net-mvc #asp.net-core #cookies

#asp.net #.net #asp.net-mvc #asp.net-core #файлы cookie

Вопрос:

Я разрабатываю Asp.Net Ядро 3.1 веб-приложение MVC с идентификатором. Моя страница входа в систему работает нормально, но после добавления services.ConfigureApplicationCookie она работает не так, как ожидалось, и продолжает перенаправлять меня на мой локальный индекс. Я не могу понять, что происходит на самом деле. Если я прокомментирую этот блок, все будет работать так, как ожидалось.

Вот мой метод ConfigureServices в файле запуска

  // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
           options.UseSqlServer(
               Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<IdentityUser, IdentityRole>(options => {
            options.SignIn.RequireConfirmedAccount = false;
        })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddIdentityCore<ApplicationUser>()
            .AddRoles<IdentityRole>()
            .AddClaimsPrincipalFactory<UserClaimsPrincipalFactory<ApplicationUser, IdentityRole>>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
        //.AddDefaultTokenProviders() 
        .AddDefaultUI();

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();

        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.Name = ".ExpirationCookie";
            options.Cookie.IsEssential = true;
            options.Cookie.HttpOnly = true;
            options.LoginPath = "/Identity/Pages/Account/Login";
            options.AccessDeniedPath = "/Identity/Pages/Account/AccessDenied"; 
            options.ExpireTimeSpan = TimeSpan.Zero;
            options.SlidingExpiration = true;
            options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
            options.Events = new CookieAuthenticationEvents
            {
                OnValidatePrincipal = ValidateAsync.ValidatingAsync
            };
        })
        .Configure<SecurityStampValidatorOptions>(options =>
        {
            options.ValidationInterval = TimeSpan.Zero;
        });

        services.AddSingleton<IEmailSender, EmailSender>();
        services.Configure<EmailOptions>(Configuration);
        services.AddHangfire(config => config.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));
        services.AddHangfireServer();
        services.AddControllersWithViews(); //?
        services.AddRazorPages().AddRazorRuntimeCompilation(); //?
        services.AddScoped<IExpirationJob, ExpirationJob>();
        services.AddScoped<IReminderJob, EmailReminder>();
        services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            //options.Password.RequireDigit = true;
            //options.Password.RequireLowercase = true;
            //options.Password.RequireNonAlphanumeric = true;
            //options.Password.RequireUppercase = true;
            //options.Password.RequiredLength = 6;
            //options.Password.RequiredUniqueChars = 1;
            // Lockout settings.
            //options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            //options.Lockout.MaxFailedAccessAttempts = 5;
            //options.Lockout.AllowedForNewUsers = true;
            // User settings.
            //options.User.AllowedUserNameCharacters =
            //    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@  ";
            //options.User.RequireUniqueEmail = false;
        });
    }
 

Ответ №1:

Из документа:

Определяет, сколько времени cookie будет оставаться действительным с момента его создания. Информация об истечении срока действия содержится в билете защищенного файла cookie. Из-за этого файл cookie с истекшим сроком действия будет проигнорирован, даже если он будет передан на сервер после того, как браузер должен был его удалить

В вашем ConfigureApplicationCookie вы устанавливаете продолжительность жизни файлов cookie на zero .

Проверка подлинности файлов cookie никогда не будет выполнена успешно, вам нужно изменить ее, например FromSeconds , FromMinutes , FromHours

     //......
    options.ExpireTimeSpan = TimeSpan.FromHours(24);
    //.......