. NET Core 3.1 с удостоверением - Как динамически установить CookieAuthenticationOptions из SQL База данных - PullRequest
0 голосов
/ 17 января 2020

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

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

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

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

Пока моя теория верна или нет чтобы загрузить параметры в методе настройки ниже, однако при входе в систему я проверяю отладчик chrome и обнаруживаю, что такие параметры, как имя cook ie, не установлены, при условии, что приложение просто использует встроенные параметры по умолчанию. Так как же мне достичь поставленных целей? Примечание. Я использую бритвенные страницы и модели страниц для большей части приложения, а также использую встроенную систему идентификации из шаблона учетных записей пользователей MS. Thx

    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 Page Страница входа в систему Модель использует стандартный метод входа в систему:

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

1 Ответ

0 голосов
/ 17 января 2020

Не уверен, что у нас разные типы проектов или. NET Базовая версия, но настроили ли вы в своем приложении использование cook ie в методе ConfigureServices?

services.ConfigureApplicationCookie(opt =>
{
    opt.Cookie.Name = systemSettings.CookieName,
    opt.LoginPath = systemSettings.LoginPath
});
...