IdentityServer4 автоматически выходит из системы через 30 минут - PullRequest
5 голосов
/ 25 мая 2020

У меня IdentityServer4 с Angular. Каждые 5 минут токен автоматически обновляется. Но через 30 минут пользователь автоматически выходит из системы. Я как-то безуспешно пытался установить пожизненные куки.

Это моя текущая конфигурация:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Identity")));

        services.AddIdentity<AppUser, IdentityRole>(options =>
            {
                options.Password.RequiredLength = 6;
                options.Password.RequireLowercase = false;
                options.Password.RequireUppercase = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireDigit = false;
                options.SignIn.RequireConfirmedEmail = true;
                options.User.RequireUniqueEmail = true;
                options.User.AllowedUserNameCharacters = null;
            })
            .AddEntityFrameworkStores<AppIdentityDbContext>()
            .AddDefaultTokenProviders();

        services.AddIdentityServer(options => options.Authentication.CookieLifetime = TimeSpan.FromHours(10))
            .AddDeveloperSigningCredential()
            .AddInMemoryPersistedGrants()
            .AddInMemoryIdentityResources(Config.GetIdentityResources())
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients(Configuration["AppUrls:ClientUrl"]))
            .AddAspNetIdentity<AppUser>();

        services.AddTransient<IProfileService, IdentityClaimsProfileService>();

        services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
           .AllowAnyMethod()
           .AllowAnyHeader()));

        services.AddRazorPages().AddRazorRuntimeCompilation();
    }

@ EDIT

Если я добавлю

services.Configure<SecurityStampValidatorOptions>(options =>
{
    options.ValidationInterval = TimeSpan.FromHours(24);
});

, тогда все работает нормально, но я уверен, что это неправильное решение для моей проблемы.


@ EDIT2

Я нашел это https://github.com/IdentityModel/oidc-client-js/issues/911#issuecomment -617724445 , и это помогло мне, но все же не уверен, правильный ли способ решить эту проблему или это просто следующий взлом.

Ответы [ 2 ]

4 голосов
/ 01 июня 2020

Насколько мне известно, это не проблема ни Identity Server 4, ни OpenID Connect.

Это logi c из Asp. Net Идентификационные файлы cookie. Это должно быть настроено в Startup.cs.

Вам необходимо добавить следующую конфигурацию cook ie:

services.ConfigureApplicationCookie(o =>
{
    o.ExpireTimeSpan = TimeSpan.FromHours(24);
    o.SlidingExpiration = true;
});

Этот ответ основан на следующих ответах:

2 голосов
/ 25 мая 2020

Обратите внимание на http://docs.identityserver.io/en/stable/topics/signin.html#overriding -cook ie -handler-configuration

Вам не хватает своего .AddAuthentication после того, как AddIdentityServer закончил с их. Что-то вроде:

services.AddIdentityServer()
...
services.AddAuthentication("MyCookie")
.AddCookie("MyCookie", options =>
{
    options.ExpireTimeSpan = ...;
});

EDIT:

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

...