.NET Core 3.1 с удостоверением - как динамически установить CookieAuthenticationOptions из базы данных SQL

Я потратил на это много часов и безрезультатно. Я хочу, чтобы у пользователя была возможность настраивать CookieAuthenticationOptions из приложения. В большинстве приведенных примеров параметры в службах настройки устанавливаются только при запуске, но это бесполезно, поскольку параметры жестко запрограммированы.

Передо мной стоит задача найти решение, которое позволяет настраивать эти параметры при использовании встроенных функций идентификации. Если бы приложение использовало аутентификацию файлов cookie без идентификации, это, вероятно, было бы легче понять.

Две основные цели:

  1. Загрузите CookieAuthenticationOptions при запуске из таблицы БД.
  2. Если настройки изменяются / обновляются в течение срока службы приложения, файлы cookie, которые уже были проблемными, должны быть аннулированы / принудительно воссозданы при следующем запросе страницы, чтобы файлы cookie теперь имели обновленные параметры.

До сих пор моя теория верна или неверна - это загрузить параметры в методе настройки ниже, однако, когда я пою, я проверяю отладчик Chrome и обнаруживаю, что такие параметры, как имя файла cookie, не были установлены, предполагая, что приложение просто использует значение по умолчанию встроенные опции. Итак, как я могу достичь поставленных выше целей? Обратите внимание: я использую бритвенные страницы и модели страниц для большей части приложения, а также использую встроенную систему идентификации из шаблона учетных записей пользователей MS. Спасибо

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions<IdentityOptions> identityOptions, IOptions<CookiePolicyOptions> cookiePolicyOptions, IOptions<CookieAuthenticationOptions> cookieOptions)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        // Added to original .net core template.
        // Whenever a request is made for a page, serilog is going to log that.
        app.UseSerilogRequestLogging();

        app.UseRouting();

        // Here I am creating a service to access the DB table and pull the options, this does work for other settings in the DB table which i have not included in this example given the focus of the topic is cookies.           
        using (var scope = app.ApplicationServices.CreateScope())
        {
            var systemSettings = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().SystemSetting.FirstOrDefault();
            if (systemSettings != null)
            {
                // Cookie Options
                cookieOptions.Value.Cookie.Name = systemSettings.CookieName;
                cookieOptions.Value.LoginPath = systemSettings.LoginPath;
                // I will add the other parameters once I got the above two working...
            }
        }

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapHub<DataHub>("/dataHub");

            endpoints.MapControllers(); // Added for use with REST API.
        });
    }

Модель страницы входа в шаблон MS использует стандартный метод входа в систему:

 var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);

person OJB1    schedule 16.01.2020    source источник


Ответы (1)


Не уверены, есть ли у нас разные типы проектов или версия .NET Core, но настроили ли вы свое приложение для использования файла cookie в методе ConfigureServices?

services.ConfigureApplicationCookie(opt =>
{
    opt.Cookie.Name = systemSettings.CookieName,
    opt.LoginPath = systemSettings.LoginPath
});
person Alper Özhan    schedule 17.01.2020
comment
У меня ранее были параметры cookie, установленные в службах настройки, но я не нашел чистого способа получить экземпляр DbContext, необходимый для чтения параметров из таблицы настроек, поэтому они были ранее жестко закодированы со статическими параметрами, но мне нужно выяснить, как отозвать файлы cookie и повторно выпустить их, если какие-либо параметры будут изменены конечным пользователем во время работы приложения. - person OJB1; 17.01.2020