jstuardo
jstuardo

Reputation: 4405

.NET Core web application loses user session. How can I extend it?

I am using .NET Core identity in my web application.

This is how I am configuring the authentication:

var ab = services.AddAuthentication(IdentityConstants.ApplicationScheme)
    .AddJwtBearer(x =>
    {
        x.RequireHttpsMetadata = true;
        x.SaveToken = true;
        x.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = configuration["Modules:Authenticate:AuthJwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = configuration["Modules:Authenticate:AuthJwt:Audience"],
            ValidateIssuerSigningKey = true,
            RequireExpirationTime = false,
            ValidateLifetime = true,
            ClockSkew = TimeSpan.Zero,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Modules:Authenticate:AuthJwt:Key"] ?? string.Empty))
        };
    });

ab.AddGoogle(googleOptions =>
    {
        googleOptions.ClientId = googleClientId;
        googleOptions.ClientSecret = configuration["Modules:Authenticate:Google:ClientSecret"] ?? string.Empty;
        googleOptions.CallbackPath = "/Security/GoogleSignIn";
    });

services.ConfigureApplicationCookie(options =>
{
    options.Cookie.Name = "DesytecCore";
    options.Cookie.Path = "/";
    options.LoginPath = "/Authenticate/Security/Login";
    options.LogoutPath = "/Authenticate/Security/Logout";
    options.AccessDeniedPath = "/Authenticate/Security/AccessDenied";
    options.ReturnUrlParameter = "ReturnUrl";
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromHours(6);
    options.Cookie.MaxAge = options.ExpireTimeSpan;
    options.SlidingExpiration = true;
    options.Cookie.SameSite = SameSiteMode.Lax;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.Events = new CookieAuthenticationEvents
    {
        OnRedirectToLogin = (context) =>
        {
            Uri oldUri = new(context.RedirectUri, UriKind.RelativeOrAbsolute);
            Uri newUri = new($"{options.LoginPath}{oldUri.Query}", UriKind.Relative);
            context.HttpContext.Response.Redirect(newUri.ToString());
            return Task.CompletedTask;
        }
    };
});

services.Configure<SecurityStampValidatorOptions>(options =>
{
    // enables immediate logout, after updating the user's stat.
    options.ValidationInterval = TimeSpan.Zero;
});

How can I do it? As you see, I need the session to remain during 6 hours, however, after a few minutes, system redirects to login page

Upvotes: 0

Views: 16

Answers (0)

Related Questions