ASP. NET Приложение Core 3.1 с быстрым выходом из системы - PullRequest
1 голос
/ 27 апреля 2020

Проблема

У меня есть ASP. NET Core 3.1 приложение с Identity, работающее на локальном IIS, и оно настроено следующим образом, и, как вы можете видеть, повар ie настроено на 3 часа:

Startup.cs


public void ConfigureServices(IServiceCollection services)
{
    services.Configure<IdentityOptions>(options =>
    {
        options.Password.RequireDigit = true;
        options.Password.RequireNonAlphanumeric = true;
        options.Password.RequireUppercase = true;
        options.Password.RequireLowercase = true;
        options.Password.RequiredLength = 8;
    });

    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.MaxAge = TimeSpan.FromHours(3);
        options.Cookie.Name = "CookieNameBlaBlaBla";
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromHours(3);

        options.LoginPath = new PathString("/login/login");
        options.AccessDeniedPath = new PathString("/login/AccessDenied");
        options.SlidingExpiration = true;
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();
    app.UseAuthorization();
}

LoginController.cs

var result = await _signInManager.PasswordSignInAsync(formModel.Email, formModel.Password, true, lockoutOnFailure: false); // isPersistent forced to be TRUE

Проблема в том, что приложение выходит из системы пользователя примерно через 30 минут, а этого не должно быть.

Я посмотрел документацию по идентификации в Microsoft но я не опознал ничего плохого или что-то упустил.

Кто-нибудь может мне помочь?


Решение

Сначала у вас есть следовать порядку, который: - Сначала AddSession () - Затем AddIdentity () или AddDefaultIdentity () - И методы настройки

Теперь я использую сеанс с поваром ie.

Пример кода файла Startup.cs:

// First AddSession()
services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(3);
    options.Cookie.MaxAge = TimeSpan.FromHours(3);
    options.Cookie.Name = "SessionNameBlaBlaBla";
    options.Cookie.HttpOnly = true;
    options.Cookie.Expiration = TimeSpan.FromHours(3);
});

// Then AddIdentity() or AddDefaultIdentity()
services.AddIdentity<User, UserRole>(options =>
{
    // Password settings.
    options.Password.RequireDigit = true;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = false;
    options.Password.RequireLowercase = false;
    options.Password.RequiredLength = 6;
}).AddDefaultTokenProviders();

// And the configure methods
services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.MaxAge = TimeSpan.FromHours(3);
    options.Cookie.Name = "CookieNameBlaBlaBla";
    options.Cookie.HttpOnly = true;

    options.LoginPath = new PathString("/login/login");
    options.AccessDeniedPath = new PathString("/login/AccessDenied");
    options.SlidingExpiration = true;
});

Благодарю @Deepak Mishra за помощь. * 104 1 *

1 Ответ

1 голос
/ 27 апреля 2020

Потому что это зависит от сеанса, пока вы не отметите «Запомнить меня?» (IsPersistent параметр PasswordSignInAsync)

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

Так что либо ищите постоянный повар ie, либо увеличьте время ожидания сеанса.

services.AddSession(options =>
{
   options.IdleTimeout = TimeSpan.FromHours(3);
});

Кроме того, согласно Документы MS, ConfigureApplicationCook ie должны вызываться после вызова AddIdentity или AddDefaultIdentity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...